diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2013-12-10 22:58:37 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2013-12-10 22:58:37 +0000 |
commit | 808c43038cdaaa1ad1a719a9027c8a5250a40c54 (patch) | |
tree | b0155eff0eedb02194531ea371f532b7ed7f67d5 | |
parent | 688974a346b1f73cbf94ebe0ca95f4690a7f922b (diff) | |
download | gcc-808c43038cdaaa1ad1a719a9027c8a5250a40c54.zip gcc-808c43038cdaaa1ad1a719a9027c8a5250a40c54.tar.gz gcc-808c43038cdaaa1ad1a719a9027c8a5250a40c54.tar.bz2 |
re PR rtl-optimization/58295 (Missed zero-extension elimination in the combiner)
PR rtl-optimization/58295
* simplify-rtx.c (simplify_truncation): Restrict the distribution for
WORD_REGISTER_OPERATIONS targets.
From-SVN: r205874
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/simplify-rtx.c | 15 |
2 files changed, 16 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3264f7a..d9f27b9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2013-12-10 Eric Botcazou <ebotcazou@adacore.com> + + PR rtl-optimization/58295 + * simplify-rtx.c (simplify_truncation): Restrict the distribution for + WORD_REGISTER_OPERATIONS targets. + 2013-12-10 Richard Sandiford <rdsandiford@googlemail.com> * genrecog.c (validate_pattern): Treat all messages except missing diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index ec13858..78cd665 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -640,11 +640,16 @@ simplify_truncation (enum machine_mode mode, rtx op, XEXP (op, 0), origmode); } - /* Simplify (truncate:SI (op:DI (x:DI) (y:DI))) - to (op:SI (truncate:SI (x:DI)) (truncate:SI (x:DI))). */ - if (GET_CODE (op) == PLUS - || GET_CODE (op) == MINUS - || GET_CODE (op) == MULT) + /* If the machine can perform operations in the truncated mode, distribute + the truncation, i.e. simplify (truncate:QI (op:SI (x:SI) (y:SI))) into + (op:QI (truncate:QI (x:SI)) (truncate:QI (y:SI))). */ + if (1 +#ifdef WORD_REGISTER_OPERATIONS + && precision >= BITS_PER_WORD +#endif + && (GET_CODE (op) == PLUS + || GET_CODE (op) == MINUS + || GET_CODE (op) == MULT)) { rtx op0 = simplify_gen_unary (TRUNCATE, mode, XEXP (op, 0), op_mode); if (op0) |