[LLVMdev] Assembly Printer

Chris Lattner clattner at apple.com
Sat Jan 2 23:00:22 PST 2010


On Jan 1, 2010, at 12:51 PM, mmms1841 wrote:

> I am trying to understand how LLVM does code generation and I have a couple of questions.
> I am using LLVM 2.6.
> 
> First, 
> if I want to change the name of an instruction,  all I need to do is to modify the XXXInstrInfo.td, right?
> Using Sparc as an example,  if I wanted to output "mysra" instead of "sra", in SparcInstrInfo.td, I would write,
> 
> defm SRA : F3_12<"mysra", 0b100111, sra>;
> 
> Is this correct? 

Yes.

> When I run llc with option -march=sparc, after I make the modification, it still outputs "sra", not "mysra". I looked into SparcGenAsmWriter.inc, and made sure that string AsmStrs includes "mysra". However, when I run gdb and do "print AsmStrs + (Bits & 1023)", it prints "sra". 
> Does this make sense or am I just overlooking something? 

Sounds like something is being overlooked.  Perhaps tblgen didn't get rerun or something didn't get relinked. 

> The second question is about pattern matching of instructions.
> I found that some of the target instructions do not have corresponding patterns to match.
> For example,  in SparcInstrInfo.td, "udiv" and "sdiv" don't seem to have any patterns specified.
>    
> defm UDIV : F3_12np<"udiv", 0b001110>;
> defm SDIV : F3_12np<"sdiv", 0b001111>;
> 
> Is this because these instructions are handled differently from other instructions in SparcISelDAGToDAG.cpp?
> In function SparcDAGToDAGISel::Select(SDValue Op), instruction selection for "sdiv" and "udiv" is done in the switch-case statement, while SelectCode(Op) takes care of the other instructions.

Yep, exactly,

-Chris
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100102/0304a1c8/attachment.html>


More information about the llvm-dev mailing list