aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/lower-subreg.cc3
-rw-r--r--gcc/testsuite/gcc.target/riscv/pr43644.c16
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" } } */