https://gcc.gnu.org/g:162a1ed70303a031c81b0aaac499aaf394560390

commit r15-2718-g162a1ed70303a031c81b0aaac499aaf394560390
Author: Richard Sandiford <richard.sandif...@arm.com>
Date:   Mon Aug 5 10:02:45 2024 +0100

    Revert "Make may_trap_p_1 return false for constant pool references 
[PR116145]" [PR116200]
    
    This reverts commit ba730fd10934e4ca004251aa3748bf9da4d35e62.

Diff:
---
 gcc/rtlanal.cc                                     | 14 ++-----
 .../gcc.target/aarch64/sve/acle/general/pr116145.c | 46 ----------------------
 2 files changed, 4 insertions(+), 56 deletions(-)

diff --git a/gcc/rtlanal.cc b/gcc/rtlanal.cc
index 893a6afbbc53..4158a531bdd7 100644
--- a/gcc/rtlanal.cc
+++ b/gcc/rtlanal.cc
@@ -3152,16 +3152,10 @@ may_trap_p_1 (const_rtx x, unsigned flags)
          && MEM_VOLATILE_P (x)
          && XEXP (x, 0) == stack_pointer_rtx)
        return true;
-      if (/* MEM_READONLY_P means that the memory is both statically
-            allocated and readonly, so MEM_NOTRAP_P should remain true
-            even if the memory reference is moved.  This is certainly
-            true for the important case of force_const_mem.
-
-            Otherwise, MEM_NOTRAP_P only relates to the actual position
-            of the memory reference; moving it out of context such as
-            when moving code when optimizing, might cause its address
-            to become invalid.  */
-         (code_changed && !MEM_READONLY_P (x))
+      if (/* MEM_NOTRAP_P only relates to the actual position of the memory
+            reference; moving it out of context such as when moving code
+            when optimizing, might cause its address to become invalid.  */
+         code_changed
          || !MEM_NOTRAP_P (x))
        {
          poly_int64 size = MEM_SIZE_KNOWN_P (x) ? MEM_SIZE (x) : -1;
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr116145.c 
b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr116145.c
deleted file mode 100644
index a3d93d3e1c84..000000000000
--- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr116145.c
+++ /dev/null
@@ -1,46 +0,0 @@
-// { dg-options "-O2" }
-
-#include <stdlib.h>
-#include <arm_sve.h>
-
-#pragma GCC target "+sve2"
-
-typedef unsigned char uchar;
-
-const uchar *
-search_line_fast (const uchar *s, const uchar *end)
-{
-  size_t VL = svcntb();
-  svuint8_t arr1, arr2;
-  svbool_t pc, pg = svptrue_b8();
-
-  // This should not be loaded inside the loop every time.
-  arr2 = svreinterpret_u8(svdup_u32(0x0a0d5c3f));
-
-  for (; s+VL <= end; s += VL) {
-    arr1 = svld1_u8(pg, s);
-    pc = svmatch_u8(pg, arr1, arr2);
-
-    if (svptest_any(pg, pc)) {
-      pc = svbrkb_z(pg, pc);
-      return s+svcntp_b8(pg, pc);
-    }
-  }
-
-  // Handle remainder.
-  if (s < end) {
-    pg = svwhilelt_b8((size_t)s, (size_t)end);
-
-    arr1 = svld1_u8(pg, s);
-    pc = svmatch_u8(pg, arr1, arr2);
-
-    if (svptest_any(pg, pc)) {
-      pc = svbrkb_z(pg, pc);
-      return s+svcntp_b8(pg, pc);
-    }
-  }
-
-  return end;
-}
-
-// { dg-final { scan-assembler {:\n\tld1b\t[^\n]*\n\tmatch\t[^\n]*\n\tb\.} } }

Reply via email to