[LLVMdev] Predicate registers/condition codes question

Ivan Llopard ivanllopard at gmail.com
Tue Jun 5 02:00:02 PDT 2012


On 04/06/2012 18:22, Sebastian Pop wrote:
> On Sun, Jun 3, 2012 at 7:11 AM, Ivan Llopard<ivanllopard at gmail.com>  wrote:
>>> So the solution that I was investigating looks like this:
>>>
>>>       for (unsigned int i = 0; i<    ISD::BUILTIN_OP_END; ++i) {
>>>         switch (i) {
>>>         // By default all operations on i8 have to be promoted to i32.
>>>         default:
>>>           setOperationAction(i, MVT::i8, Custom);
>>>           break;
>>>
>>>         // Only the following operations are legal on i8 predicates.
>>>         case ISD::AND:
>>>         case ISD::OR:
>>>         case ISD::XOR:
>>>         case ISD::SETCC:
>>>         case ISD::SIGN_EXTEND:
>>>          break;
>>>         }
>>>       }
>>>
>>> and promote all i8 to i32 in HexagonTargetLowering::LowerOperation
>> That's hard work!
> Indeed, that was my concern as well: that's why I tried to avoid using
> i8 for predicates and use p8, but now I know that is a dead-end.
>
>> Why don't you call it with "Promote" instead of
>> "Custom" and let the Legalizer do the job? Does it not work?
> I tried this, and the legalizer will happily say that i8 is a legal type
> and just return the exact same node: this is because we declared
> that Hexagon has a register for i8, that makes i8 legal for all
> promotions.

Indeed, that's what the TypeLegalizer is intended to do. On the other 
hand, the SelectionDAGLegalizer has the mechanics to promote legal nodes 
to the next legal type as requested by setOperationAction(). I tested it 
on my BE and I could see that not all isd nodes are handled yet. May be 
more cases should be added to SelectionDAGLegalize::PromoteNode() ?

Ivan

> Sebastian
> --
> Qualcomm Innovation Center, Inc is a member of Code Aurora Forum



More information about the llvm-dev mailing list