aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2007-05-30 14:11:06 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2007-05-30 14:11:06 +0000
commitfa13976560a8ae33802927ed3e607d01e96e7cfa (patch)
tree38252a4dbdfe3f79cc10bd5574226330baaa645c
parent722ba5eeacaeaf2c913d74f5d17b5e8ab9f04d37 (diff)
downloadgcc-fa13976560a8ae33802927ed3e607d01e96e7cfa.zip
gcc-fa13976560a8ae33802927ed3e607d01e96e7cfa.tar.gz
gcc-fa13976560a8ae33802927ed3e607d01e96e7cfa.tar.bz2
re PR middle-end/32152 (omp lowering creates mismatched types)
2007-05-30 Richard Guenther <rguenther@suse.de> PR middle-end/32152 * gimplify.c (gimplify_omp_atomic_pipeline): Use correct types for comparison. * fold-const.c (fold_comparison): Call maybe_canonicalize_comparison with original typed arguments. * config/i386/i386.c (ix86_gimplify_va_arg): Fix type mismatches. From-SVN: r125187
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/config/i386/i386.c8
-rw-r--r--gcc/fold-const.c2
-rw-r--r--gcc/gimplify.c3
4 files changed, 16 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9229ee1..89d7923 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2007-05-30 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/32152
+ * gimplify.c (gimplify_omp_atomic_pipeline): Use correct
+ types for comparison.
+ * fold-const.c (fold_comparison): Call maybe_canonicalize_comparison
+ with original typed arguments.
+ * config/i386/i386.c (ix86_gimplify_va_arg): Fix type mismatches.
+
2007-05-30 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/31769
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 87972b4..977ff6b 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -4912,7 +4912,7 @@ ix86_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
if (needed_intregs)
{
/* int_addr = gpr + sav; */
- t = fold_convert (ptr_type_node, gpr);
+ t = fold_convert (ptr_type_node, fold_convert (size_type_node, gpr));
t = build2 (PLUS_EXPR, ptr_type_node, sav, t);
t = build2 (GIMPLE_MODIFY_STMT, void_type_node, int_addr, t);
gimplify_and_add (t, pre_p);
@@ -4920,7 +4920,7 @@ ix86_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
if (needed_sseregs)
{
/* sse_addr = fpr + sav; */
- t = fold_convert (ptr_type_node, fpr);
+ t = fold_convert (ptr_type_node, fold_convert (size_type_node, fpr));
t = build2 (PLUS_EXPR, ptr_type_node, sav, t);
t = build2 (GIMPLE_MODIFY_STMT, void_type_node, sse_addr, t);
gimplify_and_add (t, pre_p);
@@ -4958,12 +4958,12 @@ ix86_gimplify_va_arg (tree valist, tree type, tree *pre_p, tree *post_p)
}
src_addr = fold_convert (addr_type, src_addr);
src_addr = fold_build2 (PLUS_EXPR, addr_type, src_addr,
- size_int (src_offset));
+ build_int_cst (addr_type, src_offset));
src = build_va_arg_indirect_ref (src_addr);
dest_addr = fold_convert (addr_type, addr);
dest_addr = fold_build2 (PLUS_EXPR, addr_type, dest_addr,
- size_int (INTVAL (XEXP (slot, 1))));
+ build_int_cst (addr_type, INTVAL (XEXP (slot, 1))));
dest = build_va_arg_indirect_ref (dest_addr);
t = build2 (GIMPLE_MODIFY_STMT, void_type_node, dest, src);
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 01ce961..af48916 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -8542,7 +8542,7 @@ fold_comparison (enum tree_code code, tree type, tree op0, tree op1)
return fold_build2 (cmp_code, type, variable1, const2);
}
- tem = maybe_canonicalize_comparison (code, type, arg0, arg1);
+ tem = maybe_canonicalize_comparison (code, type, op0, op1);
if (tem)
return tem;
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index a6978d9..e73e00a 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -5308,7 +5308,8 @@ gimplify_omp_atomic_pipeline (tree *expr_p, tree *pre_p, tree addr,
floating point. This allows the atomic operation to properly
succeed even with NaNs and -0.0. */
x = build3 (COND_EXPR, void_type_node,
- build2 (NE_EXPR, boolean_type_node, oldival, oldival2),
+ build2 (NE_EXPR, boolean_type_node,
+ fold_convert (itype, oldival), oldival2),
build1 (GOTO_EXPR, void_type_node, label), NULL);
gimplify_and_add (x, pre_p);