[LLVMdev] Question on use of subregs

Evan Cheng evan.cheng at apple.com
Fri Mar 14 16:43:59 PDT 2008

On Mar 14, 2008, at 10:17 AM, Bagel wrote:

> I'm trying to write a backend for a machine that has both byte and  
> word
> instructions.  Both varieties of instructions operate on the same  
> set of
> general registers.  A byte mode instruction on a general register  
> always clears
> the upper bits.  Register-to-register byte mode and work mode  
> instructions set
> condition codes based on bytes and words and thus are not  
> interchangeable.
> Do I need to have separate classes of registers for the work and byte
> instructions?  If so, I assume the byte registers are declared as  
> SubRegs?

Yes. Then you want to declare byte registers as sub-registers of the  

> Also, this machine supports memory-to-memory operations in byte and  
> word
> flavors.  What do I need to look out for to support this.

The instruction selector can be taught to *fold* loads and stores. X86  
has many load + modify + write instructions. You can take a look their  
patterns in X86InstrInfo.td  Does the target have operations that  
operate on multiple memory operands? In theory, it's possible to write  
patterns to select these as well.

> If have looked at the X86 *.td's, but that architecture is so  
> complex it is
> hard to extract the information I need.

Unfortunately x86 is the only target that supports both of the  
features you described. If you want to get started by looking at  
existing examples, it's pretty much the only choice.


> Thanks,
> Bagel
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

More information about the llvm-dev mailing list