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

Daniel Berlin dberlin@dberlin.org
Thu Aug 21 23:10:00 GMT 2003


On Thursday, August 21, 2003, at 4:45 PM, law@redhat.com wrote:

> In message <622F711B-D416-11D7-B633-000393A6D2F2@physics.uc.edu>, 
> Andrew Pinski
>  writes:
>> Here is more reduced sources:
>> union tree_node;
>> typedef union tree_node *tree;
>> typedef enum fallback_t {
>>   fb_none = 0,
>>   fb_rvalue=1,
>>   fb_lvalue=2,
>>   fb_either=1|2
>> } fallback_t;
>>
>> int
>> gimplify_expr (tree *expr_p, fallback_t fallback)
>> {
>> if ((fallback & fb_rvalue) && *expr_p)
>>     {
>>         f_temp_2();
>>     }
>>   else
>>     {
>>         abort();
>>     }
>>   return 1;
>> }
>>
>>
>> The problem is gimplify_expr (which is weird as this is the function
>> which is causing this ICE)
>> These lines on 491-494:
>> 	  /* Strip away as many useless type conversions as possible
>> 	     at the toplevel.  */
>> 	  while (tree_ssa_useless_type_conversion (*expr_p))
>> 	    *expr_p = TREE_OPERAND (*expr_p, 0);
>> is removing the conversion to boolean_type:
>> From tree_ssa_useless_type_conversion:
>>       /* If both the inner and outer types are integral types, then
>>          we can enter the equivalence if they have the same mode
>>          and signedness.  */
>>       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))
>> 	return true;
>> which is true in this case which cause it to remove the nop_expr which
>> converts to boolean_type.
>>
>> Jeff you added tree_ssa_useless_type_conversion can you say what is
>> going on and why is this happening?
> It's pretty self explanatory -- it's trying to remove type conversions 
> which
> are unnecessary.  I would ask, why do you think the conversion is 
> necessary
> in the first place?  It's possible y'all have summarized this already 
> and
> I simply missed it -- in which case just point me to the appropriate 
> point
> in the archives.

This stripping you do undoes what gimple_boolify_expr did to convert it 
to a boolean_type.
Then invert_truthop aborts when it tries to invert a non-boolean_type 
tree.
So either
1. The conversion isn't useless, but gimplify_boolify_expr is not 
generating the conversion in a way that makes it seem un-useless.
2. The conversion isn't useless, and the above is not working like it 
should.
3. The conversion really is useless, and invert_truthop_value should 
let us invert it even though it's not a BOOLEAN_TYPE.
>
> jeff
>



More information about the Gcc mailing list