[tree-ssa] bootstrap problem on powerpc-apple-darwin6.6

Andrew Pinski pinskia@physics.uc.edu
Fri Aug 22 07:21:00 GMT 2003


> 
> On Thu, 21 Aug 2003 20:01:03 -0400 (EDT), Andrew Pinski <pinskia@physics.uc.edu> wrote:
> 
> > +              && TYPE_MIN_VALUE (inner_type) == TYPE_MIN_VALUE (outer_type)
> > +              && TYPE_MAX_VALUE (inner_type) == TYPE_MAX_VALUE (outer_type))
> 
> These are trees, which can't be reliably compared with ==.  It's probably
> simpler to just compare TYPE_PRECISION.
> 

You are right I should have checked to make sure that they were not trees.

Here is a newer patch which compares the TYPE_PRECISION and it adds some commentary
about the problem so this part will not be reverted or if we see another place we 
can point them to here.

Thanks,
Andrew Pinski

ChangeLog:
	* tree-ssa.c (tree_ssa_useless_type_conversion): Check also the precision of 
	the type to make sure they are really useless type conversions.


Index: tree-ssa.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/Attic/tree-ssa.c,v
retrieving revision 1.1.4.118
diff -u -p -r1.1.4.118 tree-ssa.c
--- tree-ssa.c  20 Aug 2003 03:43:02 -0000      1.1.4.118
+++ tree-ssa.c  22 Aug 2003 02:27:07 -0000
@@ -2448,10 +2448,15 @@ tree_ssa_useless_type_conversion (tree e
 
       /* If both the inner and outer types are integral types, then
          we can enter the equivalence if they have the same mode
-         and signedness.  */
+         and signedness and precision (The type _Bool can have size of 4
+         (only happens on powerpc-darwin right now but can happen on any 
+         target that defines BOOL_TYPE_SIZE to be INT_TYPE_SIZE) and a
+         precision of 1 while unsigned int is the same expect for a 
+         precision of 4 so testing of precision is nessary).  */
       else if (INTEGRAL_TYPE_P (inner_type) && INTEGRAL_TYPE_P (outer_type)
               && TYPE_MODE (inner_type) == TYPE_MODE (outer_type)
-              && TREE_UNSIGNED (inner_type) == TREE_UNSIGNED (outer_type))
+              && TREE_UNSIGNED (inner_type) == TREE_UNSIGNED (outer_type)
+              && TYPE_PRECISION (inner_type) == TYPE_PRECISION (outer_type))
        return true;
     }



More information about the Gcc mailing list