aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/arm/arm.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/arm/arm.c')
-rw-r--r--gcc/config/arm/arm.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 1bbaa4a2b02..f152afa4019 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -17206,7 +17206,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;
@@ -17219,8 +17219,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));
@@ -17260,7 +17265,7 @@ thumb1_reorg (void)
PATTERN (prev) = gen_rtx_SET (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;
}
}