[LLVMdev] "Unknown node flavor ..." Was: Re: tablegen and ptr_rc: PointerLikeRegClass

Will Schmidt will_schmidt at vnet.ibm.com
Wed Sep 19 16:41:10 PDT 2012


On Fri, 2012-09-14 at 13:10 -0500, Will Schmidt wrote:
> Hi all, 
> 
> I've been poking at AsmParser support for powerpc64
> (ppc64-elf-linux-abi) and have run into some behavior I don't understand
> with the ptr_rc references coming out of the PPC*.td files when
> generating the asm-matcher files.
> 
> For instance : 
> $  ./build/bin/llvm-tblgen llvm/lib/Target/PowerPC/PPC.td -I
> ~/llvm-head/llvm/include -I ~/llvm-head/llvm/lib/Target/PowerPC/
> -gen-asm-matcher
> 
> <...>
> 
> Included from llvm/lib/Target/PowerPC/PPC.td:16:
> /home/willschm/llvm-head/llvm/include/llvm/Target/Target.td:494:1:
> error: Operand `ptr_rc' does not derive from class Operand!
> 
> def ptr_rc : PointerLikeRegClass<0>;
> ^
> 
> 
> The comments in Target.td suggest to me that tablegen should be able to
> handle this in some way, but it's not clear to me what I'm missing that
> would enable this to begin working. 
> 
> /// PointerLikeRegClass -  ...   TableGen treats the register class as having a symbolic
> /// type that it doesn't know, and resolves the actual regclass to use by using
> /// the TargetRegisterInfo::getPointerRegClass() hook at codegen time.
> 
> I do see ptr_rc and ptr_rc_nosp references in X86/X86InstrInfo.td ; but I can't
> tell how or why it works differently there than in PowerPC/PPCInstr64Bit.td
> 
> 
> Thoughts/comments/suggestions?

I've been poking at this a bit more, and have tried wrapping the ptr_rc
within a larger blob; I'm getting different error messages out, but
can't tell whether or not this is progress. 

Using the memri definitions as inspiration:
+def ptr_rc_wrapper : Operand<iPTR> {
+  let PrintMethod = "printMemRegImm";
+  let MIOperandInfo = (ops ptr_rc:$ea_result);
+}

And then swapping out the ptr_rc: references like so:

-def LBZU : DForm_1<35, (outs GPRC:$rD, ptr_rc:$ea_result), (ins memri:
$addr),
+def LBZU : DForm_1<35, (outs GPRC:$rD, ptr_rc_wrapper:$ea_result), (ins
memri:$addr),
                    "lbzu $rD, $addr", LdStLoadUpd,
                    []>, RegConstraint<"$addr.reg = $ea_result">,
                    NoEncode<"$ea_result">;


I now get an "Unknown node flavor used in pattern: ptr_rc_wrapper".
I.e.: 
llvm[3]: Building PPC.td instruction information with tblgen
STBU: 	(set ptr_rc_wrapper:<empty>:$ea_res, (ist:iPTR GPRC:i32:$rS,
ptr_rc_wrapper:iPTR:$ptrreg, iaddroff:iPTR:
$ptroff)<<P:Predicate_itruncstore>><<P:Predicate_pre_truncst>><<P:Predicate_pre_truncsti8>>)
Included
from /home/willschm/dev/llvm.gitmirror/llvm/lib/Target/PowerPC/PPC.td:68:
/home/willschm/dev/llvm.gitmirror/llvm/lib/Target/PowerPC/PPCInstrInfo.td:825:1: error: In STBU: Unknown node flavor used in pattern: ptr_rc_wrapper


Help! 

Thanks, 
-Will

> 
> Thanks, 
> -Will
> 
> 
> 





More information about the llvm-dev mailing list