diff options
author | Jeffrey A Law <law@cygnus.com> | 1997-10-26 16:20:07 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1997-10-26 09:20:07 -0700 |
commit | da0af5a56fc0b83f9c7f7eaa4038a4a627f4cfbc (patch) | |
tree | cd9b5f643030d75564498fa835a6ecbfa4ee9281 /gcc/loop.c | |
parent | ca0f22208fdcfd30565f0163fdeab273af69456b (diff) | |
download | gcc-da0af5a56fc0b83f9c7f7eaa4038a4a627f4cfbc.zip gcc-da0af5a56fc0b83f9c7f7eaa4038a4a627f4cfbc.tar.gz gcc-da0af5a56fc0b83f9c7f7eaa4038a4a627f4cfbc.tar.bz2 |
loop.c (simplify_giv_expr): Adding two invariants results in an invariant.
* loop.c (simplify_giv_expr): Adding two invariants results
in an invariant.
From-SVN: r16179
Diffstat (limited to 'gcc/loop.c')
-rw-r--r-- | gcc/loop.c | 12 |
1 files changed, 11 insertions, 1 deletions
@@ -5353,10 +5353,13 @@ simplify_giv_expr (x, benefit) case CONST_INT: case USE: /* Both invariant. Only valid if sum is machine operand. - First strip off possible USE on first operand. */ + First strip off possible USE on the operands. */ if (GET_CODE (arg0) == USE) arg0 = XEXP (arg0, 0); + if (GET_CODE (arg1) == USE) + arg1 = XEXP (arg1, 0); + tem = 0; if (CONSTANT_P (arg0) && GET_CODE (arg1) == CONST_INT) { @@ -5364,6 +5367,13 @@ simplify_giv_expr (x, benefit) if (GET_CODE (tem) != CONST_INT) tem = gen_rtx (USE, mode, tem); } + else + { + /* Adding two invariants must result in an invariant, + so enclose addition operation inside a USE and + return it. */ + tem = gen_rtx (USE, mode, gen_rtx (PLUS, mode, arg0, arg1)); + } return tem; |