gcc: xtensa: delegitimize UNSPEC_PLT
authorMax Filippov <jcmvbkbc@gmail.com>
Mon, 25 May 2020 02:41:13 +0000 (19:41 -0700)
committerMax Filippov <jcmvbkbc@gmail.com>
Thu, 28 May 2020 01:42:37 +0000 (18:42 -0700)
This fixes 'non-delegitimized UNSPEC 3 found in variable location' notes
issued when building libraries which interferes with running tests.

2020-05-27  Max Filippov  <jcmvbkbc@gmail.com>
gcc/
* config/xtensa/xtensa.c (xtensa_delegitimize_address): New
function.
(TARGET_DELEGITIMIZE_ADDRESS): New macro.

gcc/config/xtensa/xtensa.c

index 0a5ecd2335292f34b14a4e4a591386ef7b130eae..550c9cdfd89275cc5196ba4b71b1490f12916773 100644 (file)
@@ -186,6 +186,8 @@ static HOST_WIDE_INT xtensa_constant_alignment (const_tree, HOST_WIDE_INT);
 static HOST_WIDE_INT xtensa_starting_frame_offset (void);
 static unsigned HOST_WIDE_INT xtensa_asan_shadow_offset (void);
 
+static rtx xtensa_delegitimize_address (rtx);
+
 \f
 
 /* These hooks specify assembly directives for creating certain kinds
@@ -333,6 +335,9 @@ static unsigned HOST_WIDE_INT xtensa_asan_shadow_offset (void);
 #undef TARGET_HAVE_SPECULATION_SAFE_VALUE
 #define TARGET_HAVE_SPECULATION_SAFE_VALUE speculation_safe_value_not_needed
 
+#undef TARGET_DELEGITIMIZE_ADDRESS
+#define TARGET_DELEGITIMIZE_ADDRESS xtensa_delegitimize_address
+
 struct gcc_target targetm = TARGET_INITIALIZER;
 
 \f
@@ -4424,4 +4429,23 @@ xtensa_asan_shadow_offset (void)
   return HOST_WIDE_INT_UC (0x10000000);
 }
 
+static rtx
+xtensa_delegitimize_address (rtx op)
+{
+  switch (GET_CODE (op))
+    {
+    case CONST:
+      return xtensa_delegitimize_address (XEXP (op, 0));
+
+    case UNSPEC:
+      if (XINT (op, 1) == UNSPEC_PLT)
+       return XVECEXP(op, 0, 0);
+      break;
+
+    default:
+      break;
+    }
+  return op;
+}
+
 #include "gt-xtensa.h"