aboutsummaryrefslogtreecommitdiff
path: root/gcc/expmed.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@linaro.org>2017-09-12 13:27:13 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2017-09-12 13:27:13 +0000
commit41defab318e4b5d8b87ba2b3512b02cb49c748a9 (patch)
tree1696acdfd953f44e0c6d5d50bc4ab0aeac08f502 /gcc/expmed.c
parentc651dca218fe1660781bdc5cfb249fd4c3da8a28 (diff)
downloadgcc-41defab318e4b5d8b87ba2b3512b02cb49c748a9.zip
gcc-41defab318e4b5d8b87ba2b3512b02cb49c748a9.tar.gz
gcc-41defab318e4b5d8b87ba2b3512b02cb49c748a9.tar.bz2
PR81285: Fix uninitialised variable in emit_store_flag_int
2017-09-12 Richard Sandiford <richard.sandiford@linaro.org> gcc/ PR rtl-optimization/82185 * expmed.c (emit_store_flag_int): Only test tem if it has been initialized. From-SVN: r252008
Diffstat (limited to 'gcc/expmed.c')
-rw-r--r--gcc/expmed.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/gcc/expmed.c b/gcc/expmed.c
index 7f0cb0a..ca48c606 100644
--- a/gcc/expmed.c
+++ b/gcc/expmed.c
@@ -5601,7 +5601,6 @@ emit_store_flag_int (rtx target, rtx subtarget, enum rtx_code code, rtx op0,
{
machine_mode target_mode = target ? GET_MODE (target) : VOIDmode;
rtx_insn *last = get_last_insn ();
- rtx tem;
/* If this is an equality comparison of integers, we can try to exclusive-or
(or subtract) the two operands and use a recursive call to try the
@@ -5610,8 +5609,8 @@ emit_store_flag_int (rtx target, rtx subtarget, enum rtx_code code, rtx op0,
if ((code == EQ || code == NE) && op1 != const0_rtx)
{
- tem = expand_binop (mode, xor_optab, op0, op1, subtarget, 1,
- OPTAB_WIDEN);
+ rtx tem = expand_binop (mode, xor_optab, op0, op1, subtarget, 1,
+ OPTAB_WIDEN);
if (tem == 0)
tem = expand_binop (mode, sub_optab, op0, op1, subtarget, 1,
@@ -5643,26 +5642,28 @@ emit_store_flag_int (rtx target, rtx subtarget, enum rtx_code code, rtx op0,
&& rtx_cost (GEN_INT (normalizep), mode, PLUS, 1,
optimize_insn_for_speed_p ()) == 0)
{
- tem = emit_store_flag_1 (subtarget, rcode, op0, op1, mode, 0,
- STORE_FLAG_VALUE, target_mode);
+ rtx tem = emit_store_flag_1 (subtarget, rcode, op0, op1, mode, 0,
+ STORE_FLAG_VALUE, target_mode);
if (tem != 0)
tem = expand_binop (target_mode, add_optab, tem,
gen_int_mode (normalizep, target_mode),
target, 0, OPTAB_WIDEN);
+ if (tem != 0)
+ return tem;
}
else if (!want_add
&& rtx_cost (trueval, mode, XOR, 1,
optimize_insn_for_speed_p ()) == 0)
{
- tem = emit_store_flag_1 (subtarget, rcode, op0, op1, mode, 0,
- normalizep, target_mode);
+ rtx tem = emit_store_flag_1 (subtarget, rcode, op0, op1, mode, 0,
+ normalizep, target_mode);
if (tem != 0)
tem = expand_binop (target_mode, xor_optab, tem, trueval, target,
INTVAL (trueval) >= 0, OPTAB_WIDEN);
+ if (tem != 0)
+ return tem;
}
- if (tem != 0)
- return tem;
delete_insns_since (last);
}
@@ -5680,7 +5681,7 @@ emit_store_flag_int (rtx target, rtx subtarget, enum rtx_code code, rtx op0,
/* Try to put the result of the comparison in the sign bit. Assume we can't
do the necessary operation below. */
- tem = 0;
+ rtx tem = 0;
/* To see if A <= 0, compute (A | (A - 1)). A <= 0 iff that result has
the sign bit set. */