<div>Hi Pete,</div><div><br></div><div>I tried it on LLVM 9.0.0 + git master patch show below, Still the same issue :(</div><div><br></div><div><div><div>--- a/llvm/utils/TableGen/CodeGenDAGPatterns.cpp</div><div>+++ b/llvm/utils/TableGen/CodeGenDAGPatterns.cpp</div><div>@@ -501,7 +501,7 @@ bool TypeInfer::EnforceSmallerThan(TypeSetByHwMode &Small,</div><div>                  berase_if(B, isVector);</div><div>     }</div><div>   }</div><div>-</div><div>+#if 0</div><div>   auto LT = [](MVT A, MVT B) -> bool {</div><div>     return A.getScalarSizeInBits() < B.getScalarSizeInBits() ||</div><div>            (A.getScalarSizeInBits() == B.getScalarSizeInBits() &&</div><div>@@ -516,7 +516,22 @@ bool TypeInfer::EnforceSmallerThan(TypeSetByHwMode &Small,</div><div>     return LT(A, B) || (A.getScalarSizeInBits() == B.getScalarSizeInBits() &&</div><div>                         A.getSizeInBits() == B.getSizeInBits());</div><div>   };</div><div>+#else</div><div>+  auto LT = [](MVT A, MVT B) -> bool {</div><div>+    return A.getScalarSizeInBits() < B.getScalarSizeInBits() ||</div><div>+           (A.getScalarSizeInBits() == B.getScalarSizeInBits() &&</div><div>+            A.getSizeInBits() < B.getSizeInBits());</div><div>+  };</div><div>+  auto LE = [&LT](MVT A, MVT B) -> bool {</div><div>+    // This function is used when removing elements: when a vector is compared</div><div>+    // to a non-vector, it should return false (to avoid removal).</div><div>+    if (A.isVector() != B.isVector())</div><div>+      return false;</div><div> </div><div>+    return LT(A, B) || (A.getScalarSizeInBits() == B.getScalarSizeInBits() &&</div><div>+                        A.getSizeInBits() == B.getSizeInBits());</div><div>+  };</div><div>+#endif</div><div>   for (unsigned M : Modes) {</div><div>     TypeSetByHwMode::SetType &S = Small.get(M);</div><div>     TypeSetByHwMode::SetType &B = Big.get(M);</div></div><div></div></div><div><div><br></div><div><br></div><div><br></div><div><br></div><div style="font-size: 12px;font-family: Arial Narrow;padding:2px 0 2px 0;">------------------ Original ------------------</div><div style="font-size: 12px;background:#efefef;padding:8px;"><div><b>From:</b> "Pete Couperus"<Peter.J.Couperus@synopsys.com>;</div><div><b>Date:</b> Thu, Nov 21, 2019 03:36 AM</div><div><b>To:</b> "Celine"<595602881@qq.com>;"Krzysztof Parzyszek"<kparzysz@quicinc.com>;"llvm-dev@lists.llvm.org"<llvm-dev@lists.llvm.org>;<wbr></div><div></div><div><b>Subject:</b> RE: [llvm-dev] Tablegen PAT limitation?</div></div><div><br></div>

<style></style>





<div class="WordSection1">
<p class="MsoNormal">Hi Celine,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">What LLVM version is this, and does it reproduce with the trunk?<o:p></o:p></p>
<p class="MsoNormal">I ran into a weird issue with this signature a few months back, and it turned out to be a bug in how tblgen eliminated types when inferring patterns:<o:p></o:p></p>
<p class="MsoNormal"><a href="https://reviews.llvm.org/D61705">https://reviews.llvm.org/D61705</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">If this is reproducible on trunk with some easy to apply patch, I could take a look?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Pete<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><b><span style="mso-fareast-language:ZH-CN">From:</span></b><span style="mso-fareast-language:ZH-CN"> llvm-dev <llvm-dev-bounces@lists.llvm.org>
<b>On Behalf Of </b>Celine via llvm-dev<br>
<b>Sent:</b> Tuesday, November 19, 2019 8:07 PM<br>
<b>To:</b> Krzysztof Parzyszek <kparzysz@quicinc.com>; llvm-dev <llvm-dev@lists.llvm.org><br>
<b>Subject:</b> Re: [llvm-dev] Tablegen PAT limitation?<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">Hi,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">The full trace stack:<o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">Type set is empty for each HW mode:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">possible type contradiction in the pattern below (use -print-records with llvm-tblgen to see all expanded records).<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">vtInt:     (vt:{ *:[Other] })<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">UNREACHABLE executed at /home/nancy/work/rpp_clang/llvm/utils/TableGen/CodeGenDAGPatterns.cpp:824!<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">[ 85%] Building X86GenEVEX2VEXTables.inc...<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> #0 0x000000000081b9b5 llvm::sys::PrintStackTrace(llvm::raw_ostream&) /home/nancy/work/rpp_clang/llvm/lib/Support/Unix/Signals.inc:495:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> #1 0x000000000081ba48 PrintStackTraceSignalHandler(void*) /home/nancy/work/rpp_clang/llvm/lib/Support/Unix/Signals.inc:559:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> #2 0x0000000000819602 llvm::sys::RunSignalHandlers() /home/nancy/work/rpp_clang/llvm/lib/Support/Signals.cpp:69:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> #3 0x000000000081b3b0 SignalHandler(int) /home/nancy/work/rpp_clang/llvm/lib/Support/Unix/Signals.inc:358:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">fcdsaa #4 0x00007f16408a6390 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x11390)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> #5 0x00007f163fa36428 gsignal /build/glibc-LK5gWL/glibc-2.23/signal/../sysdeps/unix/sysv/linux/raise.c:54:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> #6 0x00007f163fa3802a abort /build/glibc-LK5gWL/glibc-2.23/stdlib/abort.c:91:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> #7 0x0000000000797d00 bindingsErrorHandler(void*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) /home/nancy/work/rpp_clang/llvm/lib/Support/ErrorHandling.cpp:231:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> #8 0x00000000004838a8 llvm::TypeInfer::ValidateOnExit::~ValidateOnExit() /home/nancy/work/rpp_clang/llvm/utils/TableGen/CodeGenDAGPatterns.cpp:826:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> #9 0x00000000004808bd llvm::TypeInfer::EnforceSmallerThan(llvm::TypeSetByHwMode&, llvm::TypeSetByHwMode&) /home/nancy/work/rpp_clang/llvm/utils/TableGen/CodeGenDAGPatterns.cpp:455:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#10 0x000000000048860f llvm::SDTypeConstraint::ApplyTypeConstraint(llvm::TreePatternNode*, llvm::SDNodeInfo const&, llvm::TreePattern&) const /home/nancy/work/rpp_clang/llvm/utils/TableGen/CodeGenDAGPatterns.cpp:1506:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#11 0x00000000004a780b llvm::SDNodeInfo::ApplyTypeConstraints(llvm::TreePatternNode*, llvm::TreePattern&) const /home/nancy/work/rpp_clang/llvm/utils/TableGen/CodeGenDAGPatterns.h:1307:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#12 0x000000000048e303 llvm::TreePatternNode::ApplyTypeConstraints(llvm::TreePattern&, bool) /home/nancy/work/rpp_clang/llvm/utils/TableGen/CodeGenDAGPatterns.cpp:2362:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#13 0x000000000048e2d4 llvm::TreePatternNode::ApplyTypeConstraints(llvm::TreePattern&, bool) /home/nancy/work/rpp_clang/llvm/utils/TableGen/CodeGenDAGPatterns.cpp:2361:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#14 0x000000000048e2d4 llvm::TreePatternNode::ApplyTypeConstraints(llvm::TreePattern&, bool) /home/nancy/work/rpp_clang/llvm/utils/TableGen/CodeGenDAGPatterns.cpp:2361:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#15 0x000000000048e2d4 llvm::TreePatternNode::ApplyTypeConstraints(llvm::TreePattern&, bool) /home/nancy/work/rpp_clang/llvm/utils/TableGen/CodeGenDAGPatterns.cpp:2361:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#16 0x00000000005b3c06 (anonymous namespace)::MatcherGen::InferPossibleTypes(unsigned int) /home/nancy/work/rpp_clang/llvm/utils/TableGen/DAGISelMatcherGen.cpp:184:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#17 0x00000000005b59ca (anonymous namespace)::MatcherGen::EmitMatchCode(llvm::TreePatternNode const*, llvm::TreePatternNode*, unsigned int) /home/nancy/work/rpp_clang/llvm/utils/TableGen/DAGISelMatcherGen.cpp:491:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#18 0x00000000005b54ba (anonymous namespace)::MatcherGen::EmitOperatorMatchCode(llvm::TreePatternNode const*, llvm::TreePatternNode*, unsigned int) /home/nancy/work/rpp_clang/llvm/utils/TableGen/DAGISelMatcherGen.cpp:440:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#19 0x00000000005b5c9c (anonymous namespace)::MatcherGen::EmitMatchCode(llvm::TreePatternNode const*, llvm::TreePatternNode*, unsigned int) /home/nancy/work/rpp_clang/llvm/utils/TableGen/DAGISelMatcherGen.cpp:515:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#20 0x00000000005b6271 (anonymous namespace)::MatcherGen::EmitMatcherCode(unsigned int) /home/nancy/work/rpp_clang/llvm/utils/TableGen/DAGISelMatcherGen.cpp:559:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#21 0x00000000005b8f4a llvm::ConvertPatternToMatcher(llvm::PatternToMatch const&, unsigned int, llvm::CodeGenDAGPatterns const&) /home/nancy/work/rpp_clang/llvm/utils/TableGen/DAGISelMatcherGen.cpp:1026:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#22 0x000000000059db91 (anonymous namespace)::DAGISelEmitter::run(llvm::raw_ostream&) /home/nancy/work/rpp_clang/llvm/utils/TableGen/DAGISelEmitter.cpp:169:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#23 0x000000000059dd1b llvm::EmitDAGISel(llvm::RecordKeeper&, llvm::raw_ostream&) /home/nancy/work/rpp_clang/llvm/utils/TableGen/DAGISelEmitter.cpp:187:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#24 0x00000000007357d1 (anonymous namespace)::LLVMTableGenMain(llvm::raw_ostream&, llvm::RecordKeeper&) /home/nancy/work/rpp_clang/llvm/utils/TableGen/TableGen.cpp:170:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#25 0x000000000085c5b8 llvm::TableGenMain(char*, bool (*)(llvm::raw_ostream&, llvm::RecordKeeper&)) /home/nancy/work/rpp_clang/llvm/lib/TableGen/Main.cpp:106:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#26 0x0000000000735f0c main /home/nancy/work/rpp_clang/llvm/utils/TableGen/TableGen.cpp:253:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#27 0x00007f163fa21830 __libc_start_main /build/glibc-LK5gWL/glibc-2.23/csu/../csu/libc-start.c:325:0<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#28 0x0000000000407bd9 _start (../../../bin/llvm-tblgen+0x407bd9)<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">===========================================================<o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">PATTERN: (st v1i16:{ *:[v1i16] }:$rs1, (add:{ *:[v1i32] } (shl:{ *:[v1i32] } (sext:{ *:[v1i32] } v1i16:{ *:[v1i16] }:$roffset), (build_vector:{ *:[v1i32] } (imm:{ *:[i32] })<<P:Predicate_uimm2>>:$rshift)), (bitconvert:{ *:[v1i32] } i32:{
 *:[i32] }:$rbase)))<<P:Predicate_unindexedstore>><<P:Predicate_store>><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">RESULT:  (STOREbos v1i16:{ *:[v1i16] }:$rs1, i32:{ *:[i32] }:$rbase, v1i16:{ *:[v1i16] }:$roffset, (imm:{ *:[i32] }):$rshift)<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">DAGIselMatcherGen.cpp: 559<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Pattern.getSrcPattern()->dump(); <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">//  list<dag> Pattern = [(store v1i16:$rs1, (add (v1i32 (bitconvert i32:$rbase)), (shl (v1i32 (sext v1i16:$roffset)), (v1i32 (build_vector uimm2:$rshift)))))];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">In CodeGenDAGPatterns.cpp: 1443<o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">bool SDTypeConstraint::ApplyTypeConstraint(TreePatternNode *N,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                           const SDNodeInfo &NodeInfo,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                           TreePattern &TP) const {<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">.....<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">N->dump() ; //  (sext:{ *:[v1i32] } v1i16:{ *:[i16] }:$roffset)<o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">Why it become v1i16:{ *:[i16] }:$roffset? Should be (sext:{ *:[v1i32] } v1i16:{ *:[v1i16] }:$roffset) as the Pattern defined.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">  case SDTCisOpSmallerThanOp: {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    unsigned BResNo = 0;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    TreePatternNode *BigOperand =<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">      getOperandNum(x.SDTCisOpSmallerThanOp_Info.BigOperandNum, N, NodeInfo,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                    BResNo);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">NodeToApply->dump(); //v1i16:{ *:[i16] }:$roffset<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">BigOperand->dump();  //(sext:{ *:[v1i32] } v1i16:{ *:[i16] }:$roffset)<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">    return TI.EnforceSmallerThan(NodeToApply->getExtType(ResNo),<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                 BigOperand->getExtType(BResNo));<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  }<o:p></o:p></p>
</div>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">bool TypeInfer::EnforceSmallerThan(TypeSetByHwMode &Small,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                                   TypeSetByHwMode &Big) {<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal">Small->dump(); //{ *:[i16] }<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Big->dump(); // { *:[v1i32] }<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">....<o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">    if (none_of(S, isVector) || none_of(B, isVector)) {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">      Changed |= berase_if(S, isVector) |<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">                 berase_if(B, isVector);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    }<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal">Changed turn to True here which trigger the final error assert.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">How to understand Pattern Match process? Any document?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><span style=" font-size:9.0pt ; ;  ">------------------ Original ------------------<o:p></o:p></span></p>
</div>
<div>
<div>
<p class="MsoNormal" style="background:#EFEFEF"><b><span style="font-size:9.0pt">From:</span></b><span style="font-size:9.0pt"> "Krzysztof Parzyszek"<<a href="mailto:kparzysz@quicinc.com">kparzysz@quicinc.com</a>>;<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="background:#EFEFEF"><b><span style="font-size:9.0pt">Date:</span></b><span style="font-size:9.0pt"> Tue, Nov 19, 2019 10:09 PM<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="background:#EFEFEF"><b><span style="font-size:9.0pt">To:</span></b><span style="font-size:9.0pt"> "Celine"<<a href="mailto:595602881@qq.com">595602881@qq.com</a>>;"<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>"<<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>>;<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="background:#EFEFEF"><b><span style="font-size:9.0pt">Subject:</span></b><span style="font-size:9.0pt"> RE: [llvm-dev] Tablegen PAT limitation?<o:p></o:p></span></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Hi,<o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">The problem is with a pattern that has a vt in it: the ¡°vtInt ¡­¡± printed below the error message.  Could you run llvm-tblgen from a debugger and show the stack trace from where
 the error occurred?<o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:9.0pt;font-family:Consolas">--
</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span style="font-size:8.0pt;font-family:Consolas">Krzysztof Parzyszek
<a href="mailto:kparzysz@quicinc.com"><span style="color:#0563C1">kparzysz@quicinc.com</span></a>   AI tools development</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b>From:</b> llvm-dev <<a href="mailto:llvm-dev-bounces@lists.llvm.org">llvm-dev-bounces@lists.llvm.org</a>>
<b>On Behalf Of </b>Celine via llvm-dev<br>
<b>Sent:</b> Tuesday, November 19, 2019 6:52 AM<br>
<b>To:</b> llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>><br>
<b>Subject:</b> [EXT] [llvm-dev] Tablegen PAT limitation?<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Hello,
<o:p></o:p></p>
</div>
<div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">def GPR : RegisterClass<"ABC", [v1i16, v1f16], 16, (add<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">    IA, IB, IC, ID, IE, IF, IG, IH<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">  )>;<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">def MGPR : RegisterClass<"ABC", [v1i16, v1f16], 16, (add<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">    IA, IB, IC, ID, IE, IF, IG, IH<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">  )>;<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">def SGPR32 : RegisterClass<"ABC", [ i32, f32 ], 32, (add
<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">    DS0, DS1, DS2, DS3, DS4, DS5, DS6, DS7, DS8, DS9, DS10,DS11,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">              DS12, DS13, DS14, DS15<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">  )>;<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">def uimm2 : Operand<i32>, ImmLeaf<i32, [{return isUInt<2>(Imm);}]> {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">  let ParserMatchClass = UImmAsmOperand<2>;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">  let DecoderMethod = "decodeUImmOperand<2>";<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">}<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">possible type contradiction in the pattern below (use -print-records with llvm-tblgen to see all expanded records).<o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">vtInt:   (vt:{ *:[Other] })<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">UNREACHABLE executed at /home/nancy/rpp_llvm/rpp_clang/llvm/utils/TableGen/CodeGenDAGPatterns.cpp:824!<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">def LOADbos { // Instruction ABCInst ABCInstMMEMrr<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">  field bits<32> Inst = { 0, 0, 0, 0, rs1{2}, rs1{1}, rs1{0}, index{0}, 0, 0, 0, 1, 0, rbase{3}, rbase{2}, rbase{1}, rbase{0}, rbase{4}, roffset{4}, roffset{3}, roffset{2}, roffset{1},
 roffset{0}, 0, 0, 0, 0, 0, 0, 0, 0, 0 };<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">  field bits<32> SoftFail = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">  string Namespace = "ABC";<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">  dag OutOperandList = (outs GPR:$rs1);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">  dag InOperandList = (ins SGPR32:$rbase, MGPR:$roffset, uimm2:$rshift);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">  string AsmString = "LOAD         [$rbase + ( $roffset << $rshift )], $rs1";<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">  list<dag> Pattern = [(set v1i16:$rs1, (load (add (v1i32 (bitconvert i32:$rbase)), (shl (v1i32 (sext v1i16:$roffset)), (v1i32 (build_vector uimm2:$rshift))))))];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">  list<Register> Uses = [];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">  list<Register> Defs = [];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">  list<Predicate> Predicates = [];<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">-gen-dag-isel -debug<o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">PATTERN: (ld:{ *:[v1i16] } (add:{ *:[v1i32] } (shl:{ *:[v1i32] } (sext:{ *:[v1i32] } v1i16:{ *:[v1i16] }:$roffset), (build_vector:{ *:[v1i32] } (imm:{ *:[i32] })<<P:Predicate_uimm2>>:$rshift)),
 (bitconvert:{ *:[v1i32] } i32:{ *:[i32] }:$rbase)))<<P:Predicate_unindexedload>><<P:Predicate_load>><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">RESULT:  (LOADbos:{ *:[v1i16] } i32:{ *:[i32] }:$rbase, v1i16:{ *:[v1i16] }:$roffset, (imm:{ *:[i32] }):$rshift)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">PATTERN: (st v1i16:{ *:[v1i16] }:$rs1, (add:{ *:[v1i32] } v1i32:{ *:[v1i32] }:$roffset, (bitconvert:{ *:[v1i32] } i32:{ *:[i32] }:$rbase)))<<P:Predicate_unindexedstore>><<P:Predicate_store>><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">RESULT:  (STORErr v1i16:{ *:[v1i16] }:$rs1, i32:{ *:[i32] }:$rbase, v1i32:{ *:[v1i32] }:$roffset)<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Type set is empty for each HW mode:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">possible type contradiction in the pattern below (use -print-records with llvm-tblgen to see all expanded records).<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">vtInt:   (vt:{ *:[Other] })<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">UNREACHABLE executed at /home/nancy/work/rpp_clang/llvm/utils/TableGen/CodeGenDAGPatterns.cpp:824!<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Any idea to solve this problem?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"> <o:p></o:p></p>
</div>
</div>
</div>
</div>
</div></div>