diff options
author | dberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-10-20 21:23:22 +0000 |
---|---|---|
committer | dberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-10-20 21:23:22 +0000 |
commit | 6d9e68e3a78675b0dd43804e4d568a2ba76033aa (patch) | |
tree | d4a933e72b887f8b892baaa1650460eabbb9c54a /gcc/tree-ssa-pre.c | |
parent | cf58dc99d4e6160aa505b8a789fc3b6d42307553 (diff) | |
download | gcc-6d9e68e3a78675b0dd43804e4d568a2ba76033aa.tar.gz |
2008-10-20 Daniel Berlin <dberlin@dberlin.org>
* tree-ssa-pre.c (insert_into_preds_of_block): Don't rewrite constant
part of expression.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@141249 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-ssa-pre.c')
-rw-r--r-- | gcc/tree-ssa-pre.c | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index f57500e62ac..dc576c5a3d7 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -3019,23 +3019,15 @@ insert_into_preds_of_block (basic_block block, unsigned int exprnum, should give us back a constant with the right type. */ tree constant = PRE_EXPR_CONSTANT (eprime); - if (TREE_TYPE (constant) != type) + if (!useless_type_conversion_p (type, TREE_TYPE (constant))) { tree builtexpr = fold_convert (type, constant); - if (is_gimple_min_invariant (builtexpr)) - { - PRE_EXPR_CONSTANT (eprime) = builtexpr; - } - else + if (!is_gimple_min_invariant (builtexpr)) { tree forcedexpr = force_gimple_operand (builtexpr, &stmts, true, NULL); - if (is_gimple_min_invariant (forcedexpr)) - { - PRE_EXPR_CONSTANT (eprime) = forcedexpr; - } - else + if (!is_gimple_min_invariant (forcedexpr)) { if (forcedexpr != builtexpr) { |