[lno-branch]: Patch to fix bootstrap problem on darwin
Pop Sébastian
pop@gauvain.u-strasbg.fr
Mon Jan 12 15:11:00 GMT 2004
On Mon, Jan 12, 2004 at 05:03:26PM +0200, Dorit Naishlos wrote:
>
> > This at least gets past the first failure. tree_fold_int_plus can
> > return a NON_LVALUE_EXPR
>
> thanks! (bootstrapping now)
>
I have bootstrapped the following patch on i686. It's the same patch
as Dan's, but it fixes also the other operations.
Can you test it on powerpc?
Index: tree-fold-const.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/Attic/tree-fold-const.h,v
retrieving revision 1.1.2.2
diff -c -3 -p -r1.1.2.2 tree-fold-const.h
*** tree-fold-const.h 9 Jan 2004 12:15:53 -0000 1.1.2.2
--- tree-fold-const.h 12 Jan 2004 15:05:34 -0000
*************** static inline tree
*** 116,135 ****
tree_fold_int_plus (tree a,
tree b)
{
if (TREE_CODE (a) == REAL_CST)
! return build (PLUS_EXPR, TREE_TYPE (a), a, b);
! if (TREE_CODE (b) == REAL_CST)
! return build (PLUS_EXPR, TREE_TYPE (b), a, b);
else if (TREE_TYPE (a) == TREE_TYPE (b))
! return fold (build (PLUS_EXPR, TREE_TYPE (a), a, b));
else
{
a = copy_node (a);
b = copy_node (b);
TREE_TYPE (a) = integer_type_node;
TREE_TYPE (b) = integer_type_node;
! return fold (build (PLUS_EXPR, integer_type_node, a, b));
}
}
/* Fold the substraction. */
--- 116,146 ----
tree_fold_int_plus (tree a,
tree b)
{
+ tree res;
+
if (TREE_CODE (a) == REAL_CST)
! res = build (PLUS_EXPR, TREE_TYPE (a), a, b);
!
! else if (TREE_CODE (b) == REAL_CST)
! res = build (PLUS_EXPR, TREE_TYPE (b), a, b);
!
else if (TREE_TYPE (a) == TREE_TYPE (b))
! res = fold (build (PLUS_EXPR, TREE_TYPE (a), a, b));
!
else
{
a = copy_node (a);
b = copy_node (b);
TREE_TYPE (a) = integer_type_node;
TREE_TYPE (b) = integer_type_node;
! res = fold (build (PLUS_EXPR, integer_type_node, a, b));
}
+
+ if (TREE_CODE (res) == NON_LVALUE_EXPR)
+ return TREE_OPERAND (res, 0);
+
+ else
+ return res;
}
/* Fold the substraction. */
*************** static inline tree
*** 138,157 ****
tree_fold_int_minus (tree a,
tree b)
{
if (TREE_CODE (a) == REAL_CST)
! return build (MINUS_EXPR, TREE_TYPE (a), a, b);
! if (TREE_CODE (b) == REAL_CST)
! return build (MINUS_EXPR, TREE_TYPE (b), a, b);
else if (TREE_TYPE (a) == TREE_TYPE (b))
! return fold (build (MINUS_EXPR, TREE_TYPE (a), a, b));
else
{
a = copy_node (a);
b = copy_node (b);
TREE_TYPE (a) = integer_type_node;
TREE_TYPE (b) = integer_type_node;
! return fold (build (MINUS_EXPR, integer_type_node, a, b));
}
}
/* Fold the multiplication. */
--- 149,179 ----
tree_fold_int_minus (tree a,
tree b)
{
+ tree res;
+
if (TREE_CODE (a) == REAL_CST)
! res = build (MINUS_EXPR, TREE_TYPE (a), a, b);
!
! else if (TREE_CODE (b) == REAL_CST)
! res = build (MINUS_EXPR, TREE_TYPE (b), a, b);
!
else if (TREE_TYPE (a) == TREE_TYPE (b))
! res = fold (build (MINUS_EXPR, TREE_TYPE (a), a, b));
!
else
{
a = copy_node (a);
b = copy_node (b);
TREE_TYPE (a) = integer_type_node;
TREE_TYPE (b) = integer_type_node;
! res = fold (build (MINUS_EXPR, integer_type_node, a, b));
}
+
+ if (TREE_CODE (res) == NON_LVALUE_EXPR)
+ return TREE_OPERAND (res, 0);
+
+ else
+ return res;
}
/* Fold the multiplication. */
*************** static inline tree
*** 160,179 ****
tree_fold_int_multiply (tree a,
tree b)
{
if (TREE_CODE (a) == REAL_CST)
! return build (MULT_EXPR, TREE_TYPE (a), a, b);
! if (TREE_CODE (b) == REAL_CST)
! return build (MULT_EXPR, TREE_TYPE (b), a, b);
else if (TREE_TYPE (a) == TREE_TYPE (b))
! return fold (build (MULT_EXPR, TREE_TYPE (a), a, b));
else
{
a = copy_node (a);
b = copy_node (b);
TREE_TYPE (a) = integer_type_node;
TREE_TYPE (b) = integer_type_node;
! return fold (build (MULT_EXPR, integer_type_node, a, b));
}
}
/* Division for integer result that rounds the quotient toward zero. */
--- 182,212 ----
tree_fold_int_multiply (tree a,
tree b)
{
+ tree res;
+
if (TREE_CODE (a) == REAL_CST)
! res = build (MULT_EXPR, TREE_TYPE (a), a, b);
!
! else if (TREE_CODE (b) == REAL_CST)
! res = build (MULT_EXPR, TREE_TYPE (b), a, b);
!
else if (TREE_TYPE (a) == TREE_TYPE (b))
! res = fold (build (MULT_EXPR, TREE_TYPE (a), a, b));
!
else
{
a = copy_node (a);
b = copy_node (b);
TREE_TYPE (a) = integer_type_node;
TREE_TYPE (b) = integer_type_node;
! res = fold (build (MULT_EXPR, integer_type_node, a, b));
}
+
+ if (TREE_CODE (res) == NON_LVALUE_EXPR)
+ return TREE_OPERAND (res, 0);
+
+ else
+ return res;
}
/* Division for integer result that rounds the quotient toward zero. */
More information about the Gcc-patches
mailing list