summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/regstat.c2
-rw-r--r--gcc/testsuite/gcc.dg/pr69634.c22
2 files changed, 23 insertions, 1 deletions
diff --git a/gcc/regstat.c b/gcc/regstat.c
index af5e475ddda..c05b69f6c1a 100644
--- a/gcc/regstat.c
+++ b/gcc/regstat.c
@@ -444,7 +444,7 @@ regstat_bb_compute_calls_crossed (unsigned int bb_index, bitmap live)
struct df_insn_info *insn_info = DF_INSN_INFO_GET (insn);
unsigned int regno;
- if (!INSN_P (insn))
+ if (!NONDEBUG_INSN_P (insn))
continue;
/* Process the defs. */
diff --git a/gcc/testsuite/gcc.dg/pr69634.c b/gcc/testsuite/gcc.dg/pr69634.c
new file mode 100644
index 00000000000..837bd57e790
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr69634.c
@@ -0,0 +1,22 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-dce -fschedule-insns -fno-tree-vrp -fcompare-debug" } */
+/* { dg-additional-options "-Wno-psabi -mno-sse" { target i?86-*-* x86_64-*-* } } */
+/* { dg-additional-options "-m32" { target x86_64-*-* } } */
+
+typedef unsigned short u16;
+typedef short v16u16 __attribute__ ((vector_size (16)));
+typedef unsigned v16u32 __attribute__ ((vector_size (16)));
+typedef unsigned long long v16u64 __attribute__ ((vector_size (16)));
+
+u16
+foo(u16 u16_1, v16u16 v16u16_0, v16u32 v16u64_0, v16u16 v16u16_1, v16u32 v16u32_1, v16u64 v16u64_1)
+{
+ v16u64_1 /= (v16u64){~v16u32_1[1]};
+ u16_1 = 0;
+ u16_1 /= v16u32_1[2];
+ v16u64_1 -= (v16u64) v16u16_1;
+ u16_1 >>= 1;
+ u16_1 -= ~0;
+ v16u16_1 /= (v16u16){~u16_1, 1 - v16u64_0[0], 0xffb6};
+ return u16_1 + v16u16_0[1] + v16u16_1[3] + v16u64_1[0] + v16u64_1[1];
+}