i386: Require in peephole2 that memory is offsettable [PR119450]
The following testcase ICEs because a peephole2 attempts to offset memory which is not offsettable (in particular address is a ZERO_EXTEND in this case). Because peephole2s don't support constraints, I've added a check for this in the peephole2's condition. 2025-03-26 Jakub Jelinek <jakub@redhat.com> PR target/119450 * config/i386/i386.md (narrow test peephole2): Test for offsettable_memref_p in condition. * gcc.target/i386/pr119450.c: New test.
This commit is contained in:
parent
36925b413e
commit
84f0b648ae
2 changed files with 18 additions and 1 deletions
|
@ -12411,7 +12411,9 @@
|
|||
(and:SWI248 (match_operand:SWI248 0 "memory_operand")
|
||||
(match_operand 1 "const_int_operand"))
|
||||
(const_int 0)))]
|
||||
"!TARGET_PARTIAL_MEMORY_READ_STALL && !MEM_VOLATILE_P (operands[0])"
|
||||
"!TARGET_PARTIAL_MEMORY_READ_STALL
|
||||
&& !MEM_VOLATILE_P (operands[0])
|
||||
&& offsettable_memref_p (operands[0])"
|
||||
[(set (reg:CCZ FLAGS_REG)
|
||||
(compare:CCZ (match_dup 2) (const_int 0)))]
|
||||
{
|
||||
|
|
15
gcc/testsuite/gcc.target/i386/pr119450.c
Normal file
15
gcc/testsuite/gcc.target/i386/pr119450.c
Normal file
|
@ -0,0 +1,15 @@
|
|||
/* PR target/119450 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O3" } */
|
||||
|
||||
long *a;
|
||||
int b;
|
||||
|
||||
void
|
||||
foo (void)
|
||||
{
|
||||
unsigned d = b >> 30;
|
||||
a = (long *) (__UINTPTR_TYPE__) d;
|
||||
if (*a & 1 << 30)
|
||||
*a = 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue