[llvm-dev] Tablegen PAT limitation?

Celine via llvm-dev llvm-dev at lists.llvm.org
Mon Nov 25 19:39:22 PST 2019


I do not define sext_inreg, I guess it must be bitconvert


In fact, the pattern should be like this:

 [(OpNode (v1i16 MGPR:$rs1), (add (v1i32 (bitconvert (i32  SGPR32:$rbase))), (shl  (v1i32 (sext (v1i16 (bitconvert (i16 SGPR16:$roffset)))), (v1i32  (build_vector (i32 uimm2:$rshift))) )))]


but here I need v1i16 type  to be $roffset's type, so
[(OpNode (v1i16 MGPR:$rs1), (add (v1i32 (bitconvert (i32  SGPR32:$rbase))), (shl  (v1i32 (sext (v1i16 MGPR:$roffset))), (v1i32  (build_vector (i32 uimm2:$rshift))) )))]



Is that against some rule or a tablegen's bug needs to be fixed?



------------------ Original ------------------
From: "Krzysztof Parzyszek"<kparzysz at quicinc.com>;
Date: Tue, Nov 26, 2019 03:48 AM
To: "Celine"<595602881 at qq.com>;"llvm-dev"<llvm-dev at lists.llvm.org>;

Subject: RE: Re:RE: Re:RE: Re:RE: Re:RE: [llvm-dev]  Tablegen PAT limitation?



  
The problem is with a different pattern.  One that takes a valuetype as a parameter (for example something like sext_inreg).
 
 
 
--  
 
Krzysztof Parzyszek  kparzysz at quicinc.com   AI tools development
 
 
    
From: Celine <595602881 at qq.com> 
 Sent: Monday, November 25, 2019 1:36 AM
 To: Krzysztof Parzyszek <kparzysz at quicinc.com>; llvm-dev <llvm-dev at lists.llvm.org>
 Subject: [EXT] Re:RE: Re:RE: Re:RE: Re:RE: [llvm-dev] Tablegen PAT limitation?
 
 
 
 
  
You are welcome.
 
  
I changed the pattern, the same old error pop up again, crash in the same place. 
 
   
 
 
   
Type set is empty for each HW mode:
 
  
possible type contradiction in the pattern below (use -print-records with llvm-tblgen to see all expanded records).
 
  
vtInt:   (vt:{ *:[Other] })
 
 
UNREACHABLE executed at /home/nancy/work/rpp_clang/llvm/utils/TableGen/CodeGenDAGPatterns.cpp:824!
 
  
 
 
  
------------------ Original ------------------
 
   
From: "Krzysztof Parzyszek"<kparzysz at quicinc.com>;
 
  
Date: Fri, Nov 22, 2019 09:51 PM
 
  
To: "Celine"<595602881 at qq.com>;"llvm-dev"<llvm-dev at lists.llvm.org>;
 
  
Subject: RE: Re:RE: Re:RE: Re:RE: [llvm-dev] Tablegen PAT limitation?
 
 
  
 
 
  
Thanks.
 
Looking at the InOperandList, the rs1, rbase, etc. have register class prefixes, e.g. MGPR:$rs1.  In the pattern they don’t have them.  The error you saw (“rs1 must be an identifier”)  was caused by tablegen being unable to match the rs1 in the pattern with any of the instruction operands.
 
Could you change the pattern to
 
    [(OpNode (v1i16 MGPR:$rs1), (add (v1i32 (bitconvert (i32 SGPR32:$rbase))), (shl  (v1i32 (sext (v1i16 MGPR:$roffset))), (v1i32 (build_vector (i32 uimm2:$rshift))) )))]
 
 
 
-- 
 
Krzysztof Parzyszek kparzysz at quicinc.com   AI tools development
 
 
    
From: Celine <595602881 at qq.com> 
 Sent: Thursday, November 21, 2019 7:59 PM
 To: Krzysztof Parzyszek <kparzysz at quicinc.com>; llvm-dev <llvm-dev at lists.llvm.org>
 Subject: [EXT] Re:RE: Re:RE: Re:RE: [llvm-dev] Tablegen PAT limitation?
 
 
 
 
  
 
 
    
def STOREbos {               // InstructionEncoding Instruction RPPInst RPPInstMMEMrr
 
  
  field bits<32> Inst = { 0, 0, 0, 1, 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 };
 
  
  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 };
 
  
  int Size = 4;
 
  
  string DecoderNamespace = "";
 
  
  list<Predicate> Predicates = [];
 
  
  string DecoderMethod = "";
 
  
  bit hasCompleteDecoder = 1;
 
  
  string Namespace = "RPP";
 
  
  dag OutOperandList = (outs);
 
  
  dag InOperandList = (ins MGPR:$rs1, SGPR32:$rbase, MGPR:$roffset, uimm2:$rshift);
 
  
  string AsmString = "STORE       $rs1, [$rbase + ( $roffset << $rshift )]";
 
  
  list<dag> Pattern = [(store (v1i16 ?:$rs1), (add (v1i32 (bitconvert (i32 ?:$rbase))), (shl (v1i32 (sext (v1i16 ?:$roffset))), (v1i32 (build_vector (uimm2 ?:$rshift))))))];
 
  
  list<Register> Uses = [];
 
  
  list<Register> Defs = [];
 
  
  int CodeSize = 0;
 
  
  int AddedComplexity = 0;
 
  
  bit isReturn = 0;
 
  
  bit isBranch = 0;
 
  
  bit isEHScopeReturn = 0;
 
 
  
 
 
  
------------------ Original ------------------
 
   
 From: "Krzysztof Parzyszek"<kparzysz at quicinc.com>;
 
  
 Date: Fri, Nov 22, 2019 00:48 AM
 
  
 To: "Celine"<595602881 at qq.com>;"llvm-dev"<llvm-dev at lists.llvm.org>;
 
  
 Subject: RE: Re:RE: Re:RE: [llvm-dev] Tablegen PAT limitation?
 
 
  
 
 
  
Could you run llvm-tblgen with -print-records and show the parts that define “bos” and the pattern inside of it?
 
 
 
-- 
 
Krzysztof Parzyszek kparzysz at quicinc.com   AI tools development
 
 
    
From: Celine <595602881 at qq.com> 
 Sent: Thursday, November 21, 2019 6:51 AM
 To: Krzysztof Parzyszek <kparzysz at quicinc.com>; llvm-dev <llvm-dev at lists.llvm.org>
 Subject: [EXT] Re:RE: Re:RE: [llvm-dev] Tablegen PAT limitation?
 
 
 
 
  
Hi Krzysztof,
 
  
 
 
  
Today I try it on llvm9.0.0 version.
 
  
 
 
  
  def bos : RPPInstMMEMrr<OPC_STORE,
 
  
                (outs), (ins MGPR:$rs1, SGPR32:$rbase, MGPR:$roffset, uimm2:$rshift),
 
  
                !strconcat(opcodestr, ""), "$rs1, [$rbase + ( $roffset << $rshift )]",
 
  
  //              [(OpNode v1i16:$rs1, (add (v1i32 (bitconvert i32:$rbase)), (shl  (v1i32 (sext v1i16:$roffset)), (v1i32 (build_vector uimm2:$rshift)) )))]>;
 
  
               [(OpNode (v1i16 $rs1), (add (v1i32 (bitconvert (i32 $rbase))), (shl  (v1i32 (sext (v1i16 $roffset))), (v1i32 (build_vector (uimm2 $rshift))) )))]>;                
 
  
 
 
  
 
 
    
STOREbos(rs1, rbase, roffset, rshift):     (store ?:{ *:[v1i16] }:$rs1, (add:{} (bitconvert:{ *:[v1i32] } ?:{ *:[i32] }:$rbase), (shl:{} (sext:{ *:[v1i32] } ?:{ *:[v1i16] }:$roffset),  (build_vector:{ *:[v1i32] } (uimm2:{} ?:{}:$rshift)))))
 
  
Included from /home/nancy/work/llvm-project/llvm/lib/Target/RPP/RPP.td:26:
 
  
/home/nancy/work/llvm-project/llvm/lib/Target/RPP/RPPInstrInfo.td:565:3: error: In STOREbos: Input $rs1 must be an identifier!
 
  
  def bos : RPPInstMMEMrr<OPC_STORE,
 
 
 
   
 
 
  
 
 
  
------------------ Original ------------------
 
   
 From: "Krzysztof Parzyszek"<kparzysz at quicinc.com>;
 
  
 Date: Wed, Nov 20, 2019 09:59 PM
 
  
 To: "Celine"<595602881 at qq.com>;"llvm-dev"<llvm-dev at lists.llvm.org>;
 
  
 Subject: RE: Re:RE: [llvm-dev] Tablegen PAT limitation?
 
 
  
 
 
  
Change
 
//  list<dag> Pattern = [(store v1i16:$rs1, (add (v1i32 (bitconvert i32:$rbase)), (shl (v1i32 (sext v1i16:$roffset)), (v1i32 (build_vector uimm2:$rshift)))))];
 
 
 
To
 
//  list<dag> Pattern = [(store (v1i16 $rs1), (add (v1i32 (bitconvert (i32 $rbase))), (shl (v1i32 (sext (v1i16 $roffset))), (v1i32 (build_vector uimm2:$rshift)))))];
 
 
 
i.e. replace “type:$x” with “(type $x)”.
 
 
 
-- 
 
Krzysztof Parzyszek kparzysz at quicinc.com   AI tools development
 
 
    
From: Celine <595602881 at qq.com> 
 Sent: Tuesday, November 19, 2019 10:07 PM
 To: Krzysztof Parzyszek <kparzysz at quicinc.com>; llvm-dev <llvm-dev at lists.llvm.org>
 Subject: [EXT] Re:RE: [llvm-dev] Tablegen PAT limitation?
 
 
 
 
  
Hi,
 
  
 
 
  
The full trace stack:
 
   
Type set is empty for each HW mode:
 
  
possible type contradiction in the pattern below (use -print-records with llvm-tblgen to see all expanded records).
 
  
vtInt:   (vt:{ *:[Other] })
 
  
UNREACHABLE executed at /home/nancy/work/rpp_clang/llvm/utils/TableGen/CodeGenDAGPatterns.cpp:824!
 
  
[ 85%] Building X86GenEVEX2VEXTables.inc...
 
  
 #0 0x000000000081b9b5 llvm::sys::PrintStackTrace(llvm::raw_ostream&) /home/nancy/work/rpp_clang/llvm/lib/Support/Unix/Signals.inc:495:0
 
  
 #1 0x000000000081ba48 PrintStackTraceSignalHandler(void*) /home/nancy/work/rpp_clang/llvm/lib/Support/Unix/Signals.inc:559:0
 
  
 #2 0x0000000000819602 llvm::sys::RunSignalHandlers() /home/nancy/work/rpp_clang/llvm/lib/Support/Signals.cpp:69:0
 
  
 #3 0x000000000081b3b0 SignalHandler(int) /home/nancy/work/rpp_clang/llvm/lib/Support/Unix/Signals.inc:358:0
 
  
fcdsaa #4 0x00007f16408a6390 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x11390)
 
  
 #5 0x00007f163fa36428 gsignal /build/glibc-LK5gWL/glibc-2.23/signal/../sysdeps/unix/sysv/linux/raise.c:54:0
 
  
 #6 0x00007f163fa3802a abort /build/glibc-LK5gWL/glibc-2.23/stdlib/abort.c:91:0
 
  
 #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
 
  
 #8 0x00000000004838a8 llvm::TypeInfer::ValidateOnExit::~ValidateOnExit() /home/nancy/work/rpp_clang/llvm/utils/TableGen/CodeGenDAGPatterns.cpp:826:0
 
  
 #9 0x00000000004808bd llvm::TypeInfer::EnforceSmallerThan(llvm::TypeSetByHwMode&, llvm::TypeSetByHwMode&) /home/nancy/work/rpp_clang/llvm/utils/TableGen/CodeGenDAGPatterns.cpp:455:0
 
  
#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
 
  
#11 0x00000000004a780b llvm::SDNodeInfo::ApplyTypeConstraints(llvm::TreePatternNode*, llvm::TreePattern&) const /home/nancy/work/rpp_clang/llvm/utils/TableGen/CodeGenDAGPatterns.h:1307:0
 
  
#12 0x000000000048e303 llvm::TreePatternNode::ApplyTypeConstraints(llvm::TreePattern&, bool) /home/nancy/work/rpp_clang/llvm/utils/TableGen/CodeGenDAGPatterns.cpp:2362:0
 
  
#13 0x000000000048e2d4 llvm::TreePatternNode::ApplyTypeConstraints(llvm::TreePattern&, bool) /home/nancy/work/rpp_clang/llvm/utils/TableGen/CodeGenDAGPatterns.cpp:2361:0
 
  
#14 0x000000000048e2d4 llvm::TreePatternNode::ApplyTypeConstraints(llvm::TreePattern&, bool) /home/nancy/work/rpp_clang/llvm/utils/TableGen/CodeGenDAGPatterns.cpp:2361:0
 
  
#15 0x000000000048e2d4 llvm::TreePatternNode::ApplyTypeConstraints(llvm::TreePattern&, bool) /home/nancy/work/rpp_clang/llvm/utils/TableGen/CodeGenDAGPatterns.cpp:2361:0
 
  
#16 0x00000000005b3c06 (anonymous namespace)::MatcherGen::InferPossibleTypes(unsigned int) /home/nancy/work/rpp_clang/llvm/utils/TableGen/DAGISelMatcherGen.cpp:184:0
 
  
#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
 
  
#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
 
  
#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
 
  
#20 0x00000000005b6271 (anonymous namespace)::MatcherGen::EmitMatcherCode(unsigned int) /home/nancy/work/rpp_clang/llvm/utils/TableGen/DAGISelMatcherGen.cpp:559:0
 
  
#21 0x00000000005b8f4a llvm::ConvertPatternToMatcher(llvm::PatternToMatch const&, unsigned int, llvm::CodeGenDAGPatterns const&) /home/nancy/work/rpp_clang/llvm/utils/TableGen/DAGISelMatcherGen.cpp:1026:0
 
  
#22 0x000000000059db91 (anonymous namespace)::DAGISelEmitter::run(llvm::raw_ostream&) /home/nancy/work/rpp_clang/llvm/utils/TableGen/DAGISelEmitter.cpp:169:0
 
  
#23 0x000000000059dd1b llvm::EmitDAGISel(llvm::RecordKeeper&, llvm::raw_ostream&) /home/nancy/work/rpp_clang/llvm/utils/TableGen/DAGISelEmitter.cpp:187:0
 
  
#24 0x00000000007357d1 (anonymous namespace)::LLVMTableGenMain(llvm::raw_ostream&, llvm::RecordKeeper&) /home/nancy/work/rpp_clang/llvm/utils/TableGen/TableGen.cpp:170:0
 
  
#25 0x000000000085c5b8 llvm::TableGenMain(char*, bool (*)(llvm::raw_ostream&, llvm::RecordKeeper&)) /home/nancy/work/rpp_clang/llvm/lib/TableGen/Main.cpp:106:0
 
  
#26 0x0000000000735f0c main /home/nancy/work/rpp_clang/llvm/utils/TableGen/TableGen.cpp:253:0
 
  
#27 0x00007f163fa21830 __libc_start_main /build/glibc-LK5gWL/glibc-2.23/csu/../csu/libc-start.c:325:0
 
  
#28 0x0000000000407bd9 _start (../../../bin/llvm-tblgen+0x407bd9)
 
 
  
 
 
  
 
 
  
 
 
  
===========================================================
 
   
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>>
 
  
RESULT:  (STOREbos v1i16:{ *:[v1i16] }:$rs1, i32:{ *:[i32] }:$rbase, v1i16:{ *:[v1i16] }:$roffset, (imm:{ *:[i32] }):$rshift)
 
 
  
 
 
  
DAGIselMatcherGen.cpp: 559
 
  
Pattern.getSrcPattern()->dump(); 
 
  
//  list<dag> Pattern = [(store v1i16:$rs1, (add (v1i32 (bitconvert i32:$rbase)), (shl (v1i32 (sext v1i16:$roffset)), (v1i32 (build_vector uimm2:$rshift)))))];
 
  
 
 
  
In CodeGenDAGPatterns.cpp: 1443
 
   
bool SDTypeConstraint::ApplyTypeConstraint(TreePatternNode *N,
 
  
                                           const SDNodeInfo &NodeInfo,
 
  
                                           TreePattern &TP) const {
 
 
   
.....
 
  
N->dump() ; //  (sext:{ *:[v1i32] } v1i16:{ *:[i16] }:$roffset)
 
   
Why it become v1i16:{ *:[i16] }:$roffset? Should be (sext:{ *:[v1i32] } v1i16:{ *:[v1i16] }:$roffset) as the Pattern defined.
 
  
 
 
   
  case SDTCisOpSmallerThanOp: {
 
  
    unsigned BResNo = 0;
 
  
    TreePatternNode *BigOperand =
 
  
      getOperandNum(x.SDTCisOpSmallerThanOp_Info.BigOperandNum, N, NodeInfo,
 
  
                    BResNo);
 
  
 
 
   
NodeToApply->dump(); //v1i16:{ *:[i16] }:$roffset
 
  
BigOperand->dump();  //(sext:{ *:[v1i32] } v1i16:{ *:[i16] }:$roffset)
 
 
  
 
 
  
    return TI.EnforceSmallerThan(NodeToApply->getExtType(ResNo),
 
  
                                 BigOperand->getExtType(BResNo));
 
  
  }
 
 
 
  
 
 
   
bool TypeInfer::EnforceSmallerThan(TypeSetByHwMode &Small,
 
  
                                   TypeSetByHwMode &Big) {
 
 
  
Small->dump(); //{ *:[i16] }
 
  
Big->dump(); // { *:[v1i32] }
 
  
....
 
   
    if (none_of(S, isVector) || none_of(B, isVector)) {
 
  
      Changed |= berase_if(S, isVector) |
 
  
                 berase_if(B, isVector);
 
  
    }
 
 
  
Changed turn to True here which trigger the final error assert.
 
  
 
 
  
How to understand Pattern Match process? Any document?
 
  
 
 
  
------------------ Original ------------------
 
   
 From: "Krzysztof Parzyszek"<kparzysz at quicinc.com>;
 
  
 Date: Tue, Nov 19, 2019 10:09 PM
 
  
 To: "Celine"<595602881 at qq.com>;"llvm-dev at lists.llvm.org"<llvm-dev at lists.llvm.org>;
 
  
 Subject: RE: [llvm-dev] Tablegen PAT limitation?
 
 
  
 
 
  
Hi,
 
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?
 
 
 
-- 
 
Krzysztof Parzyszek kparzysz at quicinc.com   AI tools development
 
 
    
From: llvm-dev <llvm-dev-bounces at lists.llvm.org> On Behalf Of Celine via llvm-dev
 Sent: Tuesday, November 19, 2019 6:52 AM
 To: llvm-dev <llvm-dev at lists.llvm.org>
 Subject: [EXT] [llvm-dev] Tablegen PAT limitation?
 
 
 
 
  
Hello, 
 
    
 
 
  
def GPR : RegisterClass<"ABC", [v1i16, v1f16], 16, (add
 
  
    IA, IB, IC, ID, IE, IF, IG, IH
 
  
  )>;
 
 
  
 
 
  
def MGPR : RegisterClass<"ABC", [v1i16, v1f16], 16, (add
 
  
    IA, IB, IC, ID, IE, IF, IG, IH
 
  
  )>;
 
 
  
 
 
   
def SGPR32 : RegisterClass<"ABC", [ i32, f32 ], 32, (add 
 
  
    DS0, DS1, DS2, DS3, DS4, DS5, DS6, DS7, DS8, DS9, DS10,DS11,
 
  
              DS12, DS13, DS14, DS15
 
  
  )>;
 
 
  
 
 
   
def uimm2 : Operand<i32>, ImmLeaf<i32, [{return isUInt<2>(Imm);}]> {
 
  
  let ParserMatchClass = UImmAsmOperand<2>;
 
  
  let DecoderMethod = "decodeUImmOperand<2>";
 
  
}
 
 
  
 
 
  
possible type contradiction in the pattern below (use -print-records with llvm-tblgen to see all expanded records).
 
   
vtInt:   (vt:{ *:[Other] })
 
  
UNREACHABLE executed at /home/nancy/rpp_llvm/rpp_clang/llvm/utils/TableGen/CodeGenDAGPatterns.cpp:824!
 
 
  
 
 
   
def LOADbos { // Instruction ABCInst ABCInstMMEMrr
 
  
  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 };
 
  
  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 };
 
  
  string Namespace = "ABC";
 
  
  dag OutOperandList = (outs GPR:$rs1);
 
  
  dag InOperandList = (ins SGPR32:$rbase, MGPR:$roffset, uimm2:$rshift);
 
  
  string AsmString = "LOAD         [$rbase + ( $roffset << $rshift )], $rs1";
 
  
  list<dag> Pattern = [(set v1i16:$rs1, (load (add (v1i32 (bitconvert i32:$rbase)), (shl (v1i32 (sext v1i16:$roffset)), (v1i32 (build_vector uimm2:$rshift))))))];
 
  
  list<Register> Uses = [];
 
  
  list<Register> Defs = [];
 
  
  list<Predicate> Predicates = [];
 
 
  
 
 
  
 
 
  
-gen-dag-isel -debug
 
   
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>>
 
  
RESULT:  (LOADbos:{ *:[v1i16] } i32:{ *:[i32] }:$rbase, v1i16:{ *:[v1i16] }:$roffset, (imm:{ *:[i32] }):$rshift)
 
  
PATTERN: (st v1i16:{ *:[v1i16] }:$rs1, (add:{ *:[v1i32] } v1i32:{ *:[v1i32] }:$roffset, (bitconvert:{ *:[v1i32] } i32:{ *:[i32] }:$rbase)))<<P:Predicate_unindexedstore>><<P:Predicate_store>>
 
  
RESULT:  (STORErr v1i16:{ *:[v1i16] }:$rs1, i32:{ *:[i32] }:$rbase, v1i32:{ *:[v1i32] }:$roffset)
 
 
   
Type set is empty for each HW mode:
 
  
possible type contradiction in the pattern below (use -print-records with llvm-tblgen to see all expanded records).
 
  
vtInt:   (vt:{ *:[Other] })
 
  
UNREACHABLE executed at /home/nancy/work/rpp_clang/llvm/utils/TableGen/CodeGenDAGPatterns.cpp:824!
 
 
  
 
 
  
 
 
  
Any idea to solve this problem?
 
  
 
 
  
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20191126/c569aa34/attachment-0001.html>


More information about the llvm-dev mailing list