Hi,

On Mon, 16 May 2011, Richard Guenther wrote:

> We can't use a test for BOOLEAN_TYPE as the middle-end considers a 
> INTEGER_TYPE with same precision/signedness as compatible and thus may 
> propagate a variable of INTEGER_TYPE there.  I don't understand why 
> promoting bools to boolean_type_node during gimplification does not work 
> (it might be slightly undesirable as it might introduce conversions from 
> one boolean type to another).
> 
> So, to relax the above check to allow any of the boolean types we'd need 
> a way to enumerate them.  Or make conversions to/from BOOLEAN_TYPEs not 
> useless.

I think conversion _to_ BOOLEAN_TYPE shouldn't be useless, on the grounds 
that it requires booleanization (at least conceptually), i.e. conversion 
to a set of two values (no matter the precision or size) based on the 
outcome of comparing the RHS value with false_pre_image(TREE_TYPE(RHS)).

Conversion _from_ BOOLEAN_TYPE can be regarded as useless, as the 
conversions from false or true into false_pre_image or true_pre_image 
always is simply an embedding of 0 or 1/-1 (depending on target type 
signedness).  And if the BOOLEAN_TYPE and the LHS have same signedness the 
bit representation of boolean_true_type is (or should be) the same as the 
one converted to LHS (namely either 1 or -1).


Ciao,
Michael.

Reply via email to