[LLVMdev] Help on DAG pattern matching string
Bill Wendling
isanbard at gmail.com
Mon Jul 6 01:50:34 PDT 2009
That's kind of strange. It might be some type of "default". However,
you probably don't want to turn off the "commutative" property, unless
it really isn't commutative. I know it's painful, but it might be best
just to slog through the TableGen code in a debugger, and see why it
is that your stuff inherits properties from the ADD in
TargetSelectoinDAG.td and then why the two versions are "identical" in
TableGen's mind.
-bw
On Jul 5, 2009, at 7:15 PM, Javier Martinez wrote:
> Hi Bill,
>
> Yes, there are other patterns. I tried commenting out all the other
> instructions definitions and I still get this error. After debugging
> TblGen I found that the second pattern is being generated as a
> variant of the first. I think the reason is that the PADD
> instruction is inheriting the commutative property from ADD defined
> inTargetSelectionDAG.td. The variant ends up being the same as the
> original causing the error later on. If all this is correct then how
> can I mark the node to be non-commutable? I tried using "let
> isCommutable = 0" in the instruction definition but didn't seem to
> work.
>
> Thanks,
> Javier
>
>
> On 7/4/2009 3:08 PM, Bill Wendling wrote:
>>
>> Are there any other patterns in your TD file? If so, then one of the
>> ones before this pattern will match everything, and this pattern will
>> never be matched.
>>
>> -bw
>>
>> On Jul 3, 2009, at 8:27 PM, Javier Martinez wrote:
>>
>>
>>> Hello,
>>>
>>> I'm new to LLVM and I'm using it to translate from LLVM to another
>>> language rather than emitting actual machine code. The target
>>> language
>>> has instructions that operate on pointers which aren't naturally
>>> exposed
>>> in LLVM. Here's what I've done to add pointer support for an
>>> instruction
>>> called PADD that takes a pointers and an offset and returns the new
>>> pointer value:
>>>
>>> def DefReg : Register<"r">;
>>> def PtrReg : Register<"ptr">;
>>> def I32RC : RegisterClass<"BE", [i32], 32, [DefReg]>;
>>> def P32RC : RegisterClass<"BE", [i32], 32, [PtrReg]>;
>>> def BEInst<bits<8> op, dag outs, dag ins, string asmstr, list<dag>
>>> pattern> : Instruction { /* assign arguments to class members */ }
>>> def BE_PADD : BEInst<0F, (outs P32RC:$dst), (ins P32RC:$src1,
>>> I32RC:$src2), "PADD",
>>> [(set P32RC:$dst, (add
>>> P32RC:$src1, I32RC:$src2))]>;
>>>
>>> When I compile the project I get the error: Pattern '(add:i32
>>> P32RC:i32:$src1, I32RC:i32:$src2)' is impossible to select! Does
>>> anyone
>>> have an idea of why I'm getting this error?
>>>
>>> I've read the docs on table generator, code generator, back end,
>>> etc.
>>> but I'm still unclear on how to write pattern selection strings.
>>> Area
>>> there resources other than the LLVM docs that explain this more in
>>> detail?
>>>
>>> Thanks,
>>> Javier
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>>
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
> _______________________________________________
> 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