diff options
author | Michael Collison <michael.collison@linaro.org> | 2016-01-26 22:01:10 -0700 |
---|---|---|
committer | Linaro Code Review <review@review.linaro.org> | 2016-02-03 21:42:33 +0000 |
commit | e5d28cbb2aed76bb1839e87344fac516b84377b6 (patch) | |
tree | befd9f62298d9c41e3c10b38c49e2a6ef86333b5 | |
parent | f90f307693ffd83f82369b15b76513deb27eadb2 (diff) |
gcc/
Backport from trunk r232493.
2016-01-18 Thomas Preud'homme <thomas.preudhomme@arm.com>
* config/arm/arm.c (thumb1_reorg): Check that the comparison is
against the constant 0.
Change-Id: I5ddfc6a2dde54d15ee29f39705ca36358a724285
-rw-r--r-- | gcc/config/arm/arm.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index e21915256f2..24509cc4136 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -17159,7 +17159,7 @@ thumb1_reorg (void) FOR_EACH_BB_FN (bb, cfun) { rtx dest, src; - rtx pat, op0, set = NULL; + rtx cmp, op0, op1, set = NULL; rtx_insn *prev, *insn = BB_END (bb); bool insn_clobbered = false; @@ -17172,8 +17172,13 @@ thumb1_reorg (void) continue; /* Get the register with which we are comparing. */ - pat = PATTERN (insn); - op0 = XEXP (XEXP (SET_SRC (pat), 0), 0); + cmp = XEXP (SET_SRC (PATTERN (insn)), 0); + op0 = XEXP (cmp, 0); + op1 = XEXP (cmp, 1); + + /* Check that comparison is against ZERO. */ + if (!CONST_INT_P (op1) || INTVAL (op1) != 0) + continue; /* Find the first flag setting insn before INSN in basic block BB. */ gcc_assert (insn != BB_HEAD (bb)); @@ -17213,7 +17218,7 @@ thumb1_reorg (void) PATTERN (prev) = gen_rtx_SET (VOIDmode, dest, src); INSN_CODE (prev) = -1; /* Set test register in INSN to dest. */ - XEXP (XEXP (SET_SRC (pat), 0), 0) = copy_rtx (dest); + XEXP (cmp, 0) = copy_rtx (dest); INSN_CODE (insn) = -1; } } |