+2016-04-08 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ PR target/70566
+ * config/arm/thumb2.md (tst + branch-> lsls + branch
+ peephole below *orsi_not_shiftsi_si): Require that condition
+ register is dead after the peephole.
+ (second peephole after the above): Likewise.
+
2016-04-08 Alan Modra <amodra@gmail.com>
PR target/70117
(match_operand 5 "" "")
(match_operand 6 "" "")))]
"TARGET_THUMB2
- && (INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) < 32)"
+ && (INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) < 32)
+ && peep2_reg_dead_p (2, operands[0])"
[(parallel [(set (match_dup 0)
(compare:CC_NOOV (ashift:SI (match_dup 1) (match_dup 2))
(const_int 0)))
(match_operand 5 "" "")
(match_operand 6 "" "")))]
"TARGET_THUMB2
- && (INTVAL (operands[2]) > 0 && INTVAL (operands[2]) < 32)"
+ && (INTVAL (operands[2]) > 0 && INTVAL (operands[2]) < 32)
+ && peep2_reg_dead_p (2, operands[0])"
[(parallel [(set (match_dup 0)
(compare:CC_NOOV (ashift:SI (match_dup 1) (match_dup 2))
(const_int 0)))
+2016-04-08 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ PR target/70566
+ * gcc.c-torture/execute/pr70566.c: New test.
+
2016-04-08 Tom de Vries <tom@codesourcery.com>
* c-c++-common/goacc/uninit-copy-clause.c: New test.
--- /dev/null
+/* PR target/70566. */
+
+#define NULL 0
+
+struct mystruct
+{
+ unsigned int f1 : 1;
+ unsigned int f2 : 1;
+ unsigned int f3 : 1;
+};
+
+__attribute__ ((noinline)) void
+myfunc (int a, void *b)
+{
+}
+__attribute__ ((noinline)) int
+myfunc2 (void *a)
+{
+ return 0;
+}
+
+static void
+set_f2 (struct mystruct *user, int f2)
+{
+ if (user->f2 != f2)
+ myfunc (myfunc2 (NULL), NULL);
+ else
+ __builtin_abort ();
+}
+
+__attribute__ ((noinline)) void
+foo (void *data)
+{
+ struct mystruct *user = data;
+ if (!user->f2)
+ set_f2 (user, 1);
+}
+
+int
+main (void)
+{
+ struct mystruct a;
+ a.f1 = 1;
+ a.f2 = 0;
+ foo (&a);
+ return 0;
+}