diff options
author | Richard Guenther <rguenther@suse.de> | 2009-11-19 15:45:48 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2009-11-19 15:45:48 +0000 |
commit | b66a1bac4615611113eafcd633406e761b1f544c (patch) | |
tree | f59f907b10075665e5352400491b62f572508abe /gcc/gimple.c | |
parent | 92fa7608a4401aa21b378c3cb786098e32677825 (diff) | |
download | gcc-b66a1bac4615611113eafcd633406e761b1f544c.zip gcc-b66a1bac4615611113eafcd633406e761b1f544c.tar.gz gcc-b66a1bac4615611113eafcd633406e761b1f544c.tar.bz2 |
gimple.c (canonicalize_cond_expr_cond): Strip conversions around truth-valued expressions.
2009-11-19 Richard Guenther <rguenther@suse.de>
* gimple.c (canonicalize_cond_expr_cond): Strip conversions
around truth-valued expressions.
* tree.c (free_lang_data): Untangle check for LTO frontend.
From-SVN: r154332
Diffstat (limited to 'gcc/gimple.c')
-rw-r--r-- | gcc/gimple.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/gcc/gimple.c b/gcc/gimple.c index 676e3fd..9cec865 100644 --- a/gcc/gimple.c +++ b/gcc/gimple.c @@ -2937,9 +2937,14 @@ recalculate_side_effects (tree t) tree canonicalize_cond_expr_cond (tree t) { + /* Strip conversions around boolean operations. */ + if (CONVERT_EXPR_P (t) + && truth_value_p (TREE_CODE (TREE_OPERAND (t, 0)))) + t = TREE_OPERAND (t, 0); + /* For (bool)x use x != 0. */ - if (TREE_CODE (t) == NOP_EXPR - && TREE_TYPE (t) == boolean_type_node) + if (CONVERT_EXPR_P (t) + && TREE_CODE (TREE_TYPE (t)) == BOOLEAN_TYPE) { tree top0 = TREE_OPERAND (t, 0); t = build2 (NE_EXPR, TREE_TYPE (t), |