[LLVMdev] Purpose of MSP430Wrapper

Paul Shortis pshortis at sigtec.com
Tue Jul 24 20:49:27 PDT 2012


Hello,

I'm considering creating an LLVM backend for a 16 bit processor and 
modelling it around the (experimental) MSP430 back end.

When reviewing MSP430InstrInfo.td I see

def MSP430Wrapper : SDNode<"MSP430ISD::Wrapper", SDT_MSP430Wrapper>;

and can see in MSP430ISelLowering.cpp that

ISD::GlobalAddress:
ISD::BlockAddress:
ISD::ExternalSymbol

all get lowered to MSP430ISD::Wrapper(address space) plus the wrapped 
address node.

What has me mystified is that in some of the patterns in 
MSP430InstrInfo.td take the form

def : Pat<(i16 (MSP430Wrapper tglobaladdr:$dst)), (MOV16ri 
tglobaladdr:$dst)>;

and others ...

def : Pat<(MSP430call (i16 tglobaladdr:$dst)), (CALLi tglobaladdr:$dst)>;

In other words, some patterns rely on MSP430Wrapper being part of the 
pattern then extract the wrapped info anyway, and some others just 
directly match tglobaladdr and friends.

I have noticed that many other backends use the same idiom but so far I 
can't see what it offers to the matching process.

Can someone please explain what I'm not seeing ?

Thanks, Paul.




More information about the llvm-dev mailing list