From: Richard Sandiford Date: Mon, 5 Aug 2024 09:02:45 +0000 (+0100) Subject: Revert "Make may_trap_p_1 return false for constant pool references [PR116145]" ... X-Git-Tag: basepoints/gcc-16~6835 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=162a1ed70303a031c81b0aaac499aaf394560390;p=thirdparty%2Fgcc.git Revert "Make may_trap_p_1 return false for constant pool references [PR116145]" [PR116200] This reverts commit ba730fd10934e4ca004251aa3748bf9da4d35e62. --- diff --git a/gcc/rtlanal.cc b/gcc/rtlanal.cc index 893a6afbbc5..4158a531bdd 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 a3d93d3e1c8..00000000000 --- a/gcc/testsuite/gcc.target/aarch64/sve/acle/general/pr116145.c +++ /dev/null @@ -1,46 +0,0 @@ -// { dg-options "-O2" } - -#include -#include - -#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\.} } }