diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/loop-invariant.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr97954.c | 12 |
2 files changed, 16 insertions, 0 deletions
diff --git a/gcc/loop-invariant.c b/gcc/loop-invariant.c index 37ae654..653e303 100644 --- a/gcc/loop-invariant.c +++ b/gcc/loop-invariant.c @@ -1099,6 +1099,10 @@ find_invariant_insn (rtx_insn *insn, bool always_reached, bool always_executed) if (HAVE_cc0 && sets_cc0_p (insn)) return; + /* Jumps have control flow side-effects. */ + if (JUMP_P (insn)) + return; + set = single_set (insn); if (!set) return; diff --git a/gcc/testsuite/gcc.dg/pr97954.c b/gcc/testsuite/gcc.dg/pr97954.c new file mode 100644 index 0000000..178e1d2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr97954.c @@ -0,0 +1,12 @@ +/* PR rtl-optimization/97954 */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +int +foo (void) +{ + int x; + lab: + asm goto ("": "=r" (x) : : : lab); + return x; +} |