aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2009-11-19 15:45:48 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2009-11-19 15:45:48 +0000
commitb66a1bac4615611113eafcd633406e761b1f544c (patch)
treef59f907b10075665e5352400491b62f572508abe /gcc
parent92fa7608a4401aa21b378c3cb786098e32677825 (diff)
downloadgcc-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')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/gimple.c9
-rw-r--r--gcc/tree.c7
3 files changed, 18 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index dec2c34..e4923fc 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+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.
+
2009-11-19 Jakub Jelinek <jakub@redhat.com>
* tree.c (need_assembler_name_p): Use cgraph_get_node instead
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),
diff --git a/gcc/tree.c b/gcc/tree.c
index df24eb4..76e23f7 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -4921,6 +4921,10 @@ free_lang_data (void)
{
unsigned i;
+ /* If we are the LTO frontend we have freed lang-specific data already. */
+ if (in_lto_p)
+ return 0;
+
/* Allocate and assign alias sets to the standard integer types
while the slots are still in the way the frontends generated them. */
for (i = 0; i < itk_none; ++i)
@@ -4929,8 +4933,7 @@ free_lang_data (void)
/* FIXME. Remove after save_debug_info is working. */
if (!(flag_generate_lto
- || (!in_lto_p
- && !flag_gtoggle && debug_info_level <= DINFO_LEVEL_TERSE)))
+ || (!flag_gtoggle && debug_info_level <= DINFO_LEVEL_TERSE)))
return 0;
/* Traverse the IL resetting language specific information for