[LLVMdev] i1 promotion issue (again)
Scott Michel
scottm at aero.org
Fri Dec 12 11:42:54 PST 2008
Background: The Cell SPU does not have condition registers in the
normal sense. It fits the "zero or negative one" model, preferably
with an i32 register, which is what getSetCCResultType() will return.
Problem: LegalizeTypes promotes i1 to i8 via an i32 setcc, i.e., the
generated type legalization is:
(i8:truncate (i32:setcc i32:lhs, i32:rhs, ch:cond))
How do I keep DAGTypeLegalizer::PromoteIntRes_SETCC() from inserting
the truncate without blowing all other type promotion out of the
water (having everything promoted up to i32 as a consequence)? Would
it be permissible to add a virtual function to TargetLowering such
that the target can effectively say, "Really, the setcc is legal, no
need to truncate!"?
The alternative is to do fairly deep inspection of brconds to
eliminate the truncate, which eventually gets expanded into:
(i8:sext_in_reg (i8:truncate (i32:setcc ...)))
-scooter
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20081212/397249df/attachment.html>
More information about the llvm-dev
mailing list