diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 840668d9657..f2f77b7cdbc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2020-01-23 Jakub Jelinek + + PR rtl-optimization/93402 + * postreload.c (reload_combine_recognize_pattern): Don't try to adjust + USE insns. + 2020-01-23 Dragan Mladjenovic * config.in: Regenerated. diff --git a/gcc/postreload.c b/gcc/postreload.c index b0683269086..7cd5c7fc55f 100644 --- a/gcc/postreload.c +++ b/gcc/postreload.c @@ -1078,6 +1078,10 @@ reload_combine_recognize_pattern (rtx_insn *insn) struct reg_use *use = reg_state[regno].reg_use + i; if (GET_MODE (*use->usep) != mode) return false; + /* Don't try to adjust (use (REGX)). */ + if (GET_CODE (PATTERN (use->insn)) == USE + && &XEXP (PATTERN (use->insn), 0) == use->usep) + return false; } /* Look for (set (REGX) (CONST_INT)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 93fb3be2bb0..05b239ff4be 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2020-01-23 Jakub Jelinek + + PR rtl-optimization/93402 + * gcc.c-torture/execute/pr93402.c: New test. + 2020-01-23 Paolo Carlini PR c++/92804 diff --git a/gcc/testsuite/gcc.c-torture/execute/pr93402.c b/gcc/testsuite/gcc.c-torture/execute/pr93402.c new file mode 100644 index 00000000000..6487797d0aa --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr93402.c @@ -0,0 +1,21 @@ +/* PR rtl-optimization/93402 */ + +struct S { unsigned int a; unsigned long long b; }; + +__attribute__((noipa)) struct S +foo (unsigned long long x) +{ + struct S ret; + ret.a = 0; + ret.b = x * 11111111111ULL + 111111111111ULL; + return ret; +} + +int +main () +{ + struct S a = foo (1); + if (a.a != 0 || a.b != 122222222222ULL) + __builtin_abort (); + return 0; +}