aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@redhat.com>2018-02-16 18:17:09 +0000
committerVladimir Makarov <vmakarov@redhat.com>2018-02-16 18:17:09 +0000
commit58d36a04d032896ee94d9fc6041c0d67ad5e65eb (patch)
treeaab26e3a1041c2cd8abc6151c1d44047bb4b00de
parentcbc4ff186de062a22b6de5b1511289292585a1c0 (diff)
2018-02-16 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/70023 * lra-constraints.c (inherit_in_ebb): Take hard reg mode of src_regno into account. 2018-02-16 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/70023 * gcc.target/i386/pr70023.c: New. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@257751 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/lra-constraints.c8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/pr70023.c15
4 files changed, 33 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 78ea3af2f3b..4a1a36fd4a4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2018-02-16 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR rtl-optimization/70023
+ * lra-constraints.c (inherit_in_ebb): Take hard reg mode of
+ src_regno into account.
+
2018-02-16 Carl Love <cel@us.ibm.com>
* config/rs6000/altivec.h: Remove vec_vextract4b and vec_vinsert4b.
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c
index 9d22da232f4..d730f36fba0 100644
--- a/gcc/lra-constraints.c
+++ b/gcc/lra-constraints.c
@@ -6346,7 +6346,13 @@ inherit_in_ebb (rtx_insn *head, rtx_insn *tail)
PSEUDO_REGNO_MODE (src_regno),
reg_renumber[src_regno]);
}
- add_next_usage_insn (src_regno, use_insn, reloads_num);
+ if (src_regno >= FIRST_PSEUDO_REGISTER)
+ add_next_usage_insn (src_regno, use_insn, reloads_num);
+ else
+ {
+ for (i = 0; i < hard_regno_nregs (src_regno, reg->biggest_mode); i++)
+ add_next_usage_insn (src_regno + i, use_insn, reloads_num);
+ }
}
}
/* Process used call regs. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b77afed11b7..e5aebb10baf 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-02-16 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR rtl-optimization/70023
+ * gcc.target/i386/pr70023.c: New.
+
2018-02-16 Carl Love <cel@us.ibm.com>
* gcc.target/powerpc/p9-vinsert4b-1.c: Remove test file for non-ABI
diff --git a/gcc/testsuite/gcc.target/i386/pr70023.c b/gcc/testsuite/gcc.target/i386/pr70023.c
new file mode 100644
index 00000000000..57660e2b011
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr70023.c
@@ -0,0 +1,15 @@
+/* { dg-do compile { target { ! ia32 } } } */
+/* { dg-options "-O -fno-sched-critical-path-heuristic -fschedule-insns -m8bit-idiv -w" } */
+
+typedef int v8si __attribute__ ((vector_size (32)));
+typedef __int128 i128;
+
+i128
+foo(int u16_0, int u64_0, i128 u128_0, i128 u128_1, v8si v32u32_0, v8si v32u32_1, v8si v32u64_1)
+{
+ v32u32_0[6] <<= u128_1 & 31;
+ v32u32_0 &= (v8si){v32u64_1[2], v32u32_1[6], 0xc5a661b, 0, 2};
+ u128_1 += 0x16fe7853d732;
+ v32u32_1 /= (v8si){v32u32_0[5], u128_1, 0x92d} | 1;
+ return u128_0 + v32u32_1[1];
+}