[LLVMdev] help with tablegen

Nick Lewycky nicholas at mxc.ca
Tue Jun 16 22:02:26 PDT 2009

In order to make metadata useful to the backend, I'd like to permit 
intrinsics to be written that take metadata-typed objects. To allow 
this, I decided to try adding a new machine value type right next to isVoid.

I updated both ValueTypes.td and ValueTypes.h as well as 
TableGen/IntrinsicEmitter.cpp and TableGen/CodeGenTarget.cpp where they 
have switch(mvt). The actual patch is attached.

This runs into trouble with the X86 backend where the SSE2 forms of ADD 
are defined:

llvm[3]: Building X86.td DAG instruction selector implementation with tblgen
ADDPDrm:        (set:isVoid VR128:isFP:$dst, (fadd:isFP 
VR128:isFP:$src1, (ld:isFP 
/home/nicholas/llvm-commit/Debug/bin/tblgen: error:
Included from X86.td:128:
Included from X86InstrInfo.td:3964:
Parsing X86InstrSSE.td:1320: In ADDPDrm: Could not infer all types in 
defm ADD : basic_sse2_fp_binop_rm<0x58, "add", fadd, 
int_x86_sse2_add_sd, 1>;

I'm hoping someone with backend experience understands why this would 
happen. I've looked over the definition of basic_sse2_fp_binop_rm and 
can't see any way in which adding MVT::isMetadata should impact it or 
the type inference step.

I'm stumped. Does anyone have any suggestions?

-------------- next part --------------
A non-text attachment was scrubbed...
Name: mvt-metadata.patch
Type: text/x-patch
Size: 7893 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20090616/e5cccc31/attachment.bin>

More information about the llvm-dev mailing list