[PATCH] Reduce garbage produced by fold_truthop
Richard Guenther
rguenther@suse.de
Thu Jun 15 21:04:00 GMT 2006
This fixes fold_truthop not returning an unmodified tree.
Bootstrapped and tested on x86_64-unknown-linux-gnu.
Ok for mainline?
Thanks,
Richard.
:ADDPATCH middle-end:
2006-06-15 Michael Matz <matz@suse.de>
Richard Guenther <rguenther@suse.de>
* fold-const.c (fold_truthop): Only return new tree node if
we canonicalized something.
Index: fold-const.c
===================================================================
--- fold-const.c (revision 114599)
+++ fold-const.c (working copy)
@@ -4841,6 +4841,8 @@ fold_truthop (enum tree_code code, tree
tree lntype, rntype, result;
int first_bit, end_bit;
int volatilep;
+ tree orig_lhs = lhs, orig_rhs = rhs;
+ enum tree_code orig_code = code;
/* Start by getting the comparison codes. Fail if anything is volatile.
If one operand is a BIT_AND_EXPR with the constant one, treat it as if
@@ -4934,7 +4936,11 @@ fold_truthop (enum tree_code code, tree
build_int_cst (TREE_TYPE (ll_arg), 0));
if (LOGICAL_OP_NON_SHORT_CIRCUIT)
- return build2 (code, truth_type, lhs, rhs);
+ {
+ if (code != orig_code || lhs != orig_lhs || rhs != orig_rhs)
+ return build2 (code, truth_type, lhs, rhs);
+ return NULL_TREE;
+ }
}
/* See if the comparisons can be merged. Then get all the parameters for
More information about the Gcc-patches
mailing list