Peeter Joot via llvm-dev
2016-Nov-09 18:58 UTC
[llvm-dev] getMinimalPhysRegClass : Couldn't find the register class
I've implemented a function pass, and some associated hacks to llvm and clang, and am hitting an error in a DAG pass when my transformed IR is processed. That transformed bytecode attempts to insert a call around a load of a 'long double'. The error is: 3. Running pass 'Function Pass Manager' on module 'big.c'. 4. Running pass 'X86 DAG->DAG Instruction Selection' on function '@ld' The assert is after a failure to lookup a BestRC pointer in this function: (gdb) b 141 if (BestRC == 0) Breakpoint 3 at 0x7ffff6755436: file /home/pjoot/llvm/lib/CodeGen/TargetRegisterInfo.cpp, line 141. (gdb) c Continuing. Breakpoint 3, llvm::TargetRegisterInfo::getMinimalPhysRegClass (this=0x5cc4f8, reg=44, VT=...) at /home/pjoot/llvm/lib/CodeGen/TargetRegisterInfo.cpp:141 141 assert(BestRC && "Couldn't find the register class"); (gdb) p reg $4 = 44 (gdb) p c $5 = (const llvm::TargetRegisterClass *) 0x0 (gdb) p VT $6 = {SimpleTy = llvm::MVT::SimpleValueType::i32} The bytecode that my pass is producing is: ; Function Attrs: nounwind uwtable define x86_fp80 @ld(x86_fp80* nocapture readonly %d) local_unnamed_addr #0 { entry: %0 = load x86_fp80, x86_fp80* %d, align 16, !tbaa !1 %swap16 = tail call x86_fp80 @__lz_bswapld(x86_fp80 %0) #1 ret x86_fp80 %swap16 } where the untransformed bytecode was: define x86_fp80 @ld(x86_fp80* nocapture readonly %d) local_unnamed_addr #0 { entry: %0 = load x86_fp80, x86_fp80* %d, align 16, !tbaa !1 ret x86_fp80 %0 } What about this transformed bytecode does the later DAG->DAG pass dislike? What is the valid range of registers in this function (i.e. is the reg=45 value that I see in this function valid)? -- Peeter -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20161109/b8ef5d96/attachment-0001.html>
Krzysztof Parzyszek via llvm-dev
2016-Nov-09 19:14 UTC
[llvm-dev] getMinimalPhysRegClass : Couldn't find the register class
Could you post the output from -debug-only=isel? The transformed IR works for me. -Krzysztof On 11/9/2016 12:58 PM, Peeter Joot via llvm-dev wrote:> I've implemented a function pass, and some associated hacks to llvm and > clang, and am hitting an error in a DAG pass when my transformed IR is > processed. That transformed bytecode attempts to insert a call around a > load of a 'long double'. The error is: > > 3. Running pass 'Function Pass Manager' on module 'big.c'. > > 4. Running pass 'X86 DAG->DAG Instruction Selection' on > function '@ld' > > The assert is after a failure to lookup a BestRC pointer in this function: > > > > (gdb) b 141 if (BestRC == 0) > > Breakpoint 3 at 0x7ffff6755436: file > /home/pjoot/llvm/lib/CodeGen/TargetRegisterInfo.cpp, line 141. > > (gdb) c > > Continuing. > > Breakpoint 3, llvm::TargetRegisterInfo::getMinimalPhysRegClass > (this=0x5cc4f8, reg=44, VT=...) at > /home/pjoot/llvm/lib/CodeGen/TargetRegisterInfo.cpp:141 > > 141 assert(BestRC && "Couldn't find the register class"); > > (gdb) p reg > > $4 = 44 > > (gdb) p c > > $5 = (const llvm::TargetRegisterClass *) 0x0 > > (gdb) p VT > > $6 = {SimpleTy = llvm::MVT::SimpleValueType::i32} > > > The bytecode that my pass is producing is: > > ; Function Attrs: nounwind uwtable > > define x86_fp80 @ld(x86_fp80* nocapture readonly %d) > local_unnamed_addr #0 { > > entry: > > %0 = load x86_fp80, x86_fp80* %d, align 16, !tbaa !1 > > %swap16 = tail call x86_fp80 @__lz_bswapld(x86_fp80 %0) #1 > > ret x86_fp80 %swap16 > > } > > where the untransformed bytecode was: > > define x86_fp80 @ld(x86_fp80* nocapture readonly %d) > local_unnamed_addr #0 { > > entry: > > %0 = load x86_fp80, x86_fp80* %d, align 16, !tbaa !1 > > ret x86_fp80 %0 > > } > > What about this transformed bytecode does the later DAG->DAG pass > dislike? What is the valid range of registers in this function (i.e. is > the reg=45 value that I see in this function valid)? > > -- > Peeter > > > > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >-- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation