diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/lower-subreg.cc | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/riscv/pr43644.c | 16 |
2 files changed, 19 insertions, 0 deletions
diff --git a/gcc/lower-subreg.cc b/gcc/lower-subreg.cc index d1da943..8960893 100644 --- a/gcc/lower-subreg.cc +++ b/gcc/lower-subreg.cc @@ -1101,6 +1101,9 @@ resolve_simple_move (rtx set, rtx_insn *insn) { unsigned int i; + if (REG_P (dest) && !HARD_REGISTER_NUM_P (REGNO (dest))) + emit_clobber (dest); + for (i = 0; i < words; ++i) { rtx t = simplify_gen_subreg_concatn (word_mode, dest, diff --git a/gcc/testsuite/gcc.target/riscv/pr43644.c b/gcc/testsuite/gcc.target/riscv/pr43644.c new file mode 100644 index 0000000..3b7ddb9 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/pr43644.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv32imac -mabi=ilp32 -O2 -fdump-rtl-ira" } */ + +double foo (double a) +{ + if (a < 0.0) + return a + 1.0; + else if (a > 16.0) + return a - 3.0; + else if (a < 300.0) + return a - 30.0; + else + return a; +} + +/* { dg-final { scan-rtl-dump-not "memory is more profitable" "ira" } } */ |