[LLVMdev] problems with tablegen and namespaces

Chris Lattner sabre at nondot.org
Mon May 1 09:11:11 PDT 2006


On Mon, 1 May 2006, [UTF-8] Rafael Esp?ndola wrote:
> I am trying to write a skeleton of an ARM back end.  I have declared
> the following class
>
> class InstARM<dag ops, string asmstr, list<dag> pattern> : Instruction {
> let Namespace = "ARM";
>
> dag OperandList = ops;
> let AsmString   = asmstr;
> let Pattern = pattern;
> }
>
> and defined three instructions (ldr, str, and mov).
>
> The problem is that, in the generated code, the namespace isn't used
> everywhere I expected. For example,  in
> ARMAsmPrinter::printInstruction, the PHI instruction doesn't has an
> "ARM::" prepended to it. ldr, str and mov have. An ARM namespace is
> also missing in ARMGenInstrNames.inc.

This looks like a tblgen bug.  If you look at 
utils/TableGen/AsmWriterEmitter.cpp:290, it appears to take the namespace 
from the first instruction in an equivalence class that it comes across. 
I will fix this bug this afternoon, but in the meantime, if you define an 
instruction "AAA" which takes no operands, it will work around this.

-Chris

-- 
http://nondot.org/sabre/
http://llvm.org/




More information about the llvm-dev mailing list