Hi guys, When I am trying to define pattern in a multi class, I got something like this: “ multi class P_PAT<string sty, SDNode tNode> { def : Pat<( !cast<ValueType>(“v2” # sty) (tNode !cast<ValueType>(“v2” # sty):$src1, !cast<ValueType>(“v2” # sty):$src2) ), ( add !cast<ValueType>(“v2” # sty):$src1, !cast<ValueType>(“v2” # sty):$src2) >; } “ noticed that in the above pattern, the "!cast<ValueType>(“v2” # sty)” is used several times, make the pattern looks so complicated. Is there anyway to define a “local variable” so I can define it only once and use it? like to make the above definition to something like: "multi class P_PAT<string sty, SDNode tNode> { ValueType tt = !cast<ValueType>(“v2” # sty); def : Pat<( tt (tNode tt:$src1, tt:$src2) ), ( add tt:$src1, tt:$src2) >; } “ where the "ValueType tt = !cast<ValueType>(“v2” # sty); “ is the local variable definition, but is sure generate compiling errors. how to fix it? Best kevin
On Wed, Feb 18, 2015 at 11:44:12AM -0500, kewuzhang wrote:> Hi guys, > > When I am trying to define pattern in a multi class, I got something like this: > “ > multi class P_PAT<string sty, SDNode tNode> > { > def : Pat<( !cast<ValueType>(“v2” # sty) (tNode !cast<ValueType>(“v2” # sty):$src1, !cast<ValueType>(“v2” # sty):$src2) ), > ( add !cast<ValueType>(“v2” # sty):$src1, !cast<ValueType>(“v2” # sty):$src2) >; > } > “ > noticed that in the above pattern, the "!cast<ValueType>(“v2” # sty)” is used several times, make the pattern looks so complicated. > Is there anyway to define a “local variable” so I can define it only once and use it? >Try something like this: multi class P_PAT<string sty, SDNode tNode, ValueType vt = !cast<ValueType>(“v2” # sty)> { ... } Alternatively, you could create a class that wraps the pattern to simplify it. For example: class MyPat <ValueType vt, SDNode tNode> : Pat < ...>;multiclass P_PAT<string sty, SDNode tNode> { def : MyPat<!Cast<ValueType>("v2" # sty), sty>; } -Tom> like to make the above definition to something like: > "multi class P_PAT<string sty, SDNode tNode> > { > ValueType tt = !cast<ValueType>(“v2” # sty); > def : Pat<( tt (tNode tt:$src1, tt:$src2) ), > ( add tt:$src1, tt:$src2) >; > } > “ > where the "ValueType tt = !cast<ValueType>(“v2” # sty); “ is the local variable definition, but is sure generate compiling errors. > how to fix it? > > Best > > kevin > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> On Feb 18, 2015, at 9:46 AM, Tom Stellard <tom at stellard.net> wrote: > > On Wed, Feb 18, 2015 at 11:44:12AM -0500, kewuzhang wrote: >> Hi guys, >> >> When I am trying to define pattern in a multi class, I got something like this: >> “ >> multi class P_PAT<string sty, SDNode tNode> >> { >> def : Pat<( !cast<ValueType>(“v2” # sty) (tNode !cast<ValueType>(“v2” # sty):$src1, !cast<ValueType>(“v2” # sty):$src2) ), >> ( add !cast<ValueType>(“v2” # sty):$src1, !cast<ValueType>(“v2” # sty):$src2) >; >> } >> “ >> noticed that in the above pattern, the "!cast<ValueType>(“v2” # sty)” is used several times, make the pattern looks so complicated. >> Is there anyway to define a “local variable” so I can define it only once and use it? >> > > Try something like this: > > multi class P_PAT<string sty, SDNode tNode, ValueType vt = !cast<ValueType>(“v2” # sty)> { > > ... > > }Neat!> > > Alternatively, you could create a class that wraps the pattern to simplify it. For example: > > class MyPat <ValueType vt, SDNode tNode> : Pat < > ... >> ; > > multiclass P_PAT<string sty, SDNode tNode> { > def : MyPat<!Cast<ValueType>("v2" # sty), sty>; > } > > -Tom > >> like to make the above definition to something like: >> "multi class P_PAT<string sty, SDNode tNode> >> { >> ValueType tt = !cast<ValueType>(“v2” # sty); >> def : Pat<( tt (tNode tt:$src1, tt:$src2) ), >> ( add tt:$src1, tt:$src2) >; >> } >> “ >> where the "ValueType tt = !cast<ValueType>(“v2” # sty); “ is the local variable definition, but is sure generate compiling errors. >> how to fix it? >> >> Best >> >> kevin >> _______________________________________________ >> 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 <mailto:LLVMdev at cs.uiuc.edu> http://llvm.cs.uiuc.edu <http://llvm.cs.uiuc.edu/> > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev <http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev>-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150219/9e8f1f5c/attachment.html>
Apparently Analagous Threads
- [LLVMdev] Operand order in dag pattern matching in td files
- [LLVMdev] Operand order in dag pattern matching in td files
- [LLVMdev] Types in TableGen instruction selection patterns
- [LLVMdev] X86 Tablegen Description and VEX.W
- [LLVMdev] X86 Tablegen Description and VEX.W