[LLVMdev] debug info for llvm::IntrinsicInst ???
reed kotler
rkotler at mips.com
Fri Jan 30 22:37:12 PST 2015
Ok.
I'm basically just following the model of the other fast-isel ports.
On 01/30/2015 09:12 PM, David Blaikie wrote:
> (I'm assuming you're building LLVM with clang, in this case?)
>
> Looks like IntrinsicInst is one of those "lies" in LLVM that works via
> type punning that's undefined behavior in C++, so it's code that
> should be fixed anyway.
>
> In any case, the reason this produces the debugging experience you're
> seeing is that LLVM (& GCC, for that matter) assumes that if your
> class has virtual functions, such as IntrinsicInst, here - then to use
> the type one must've emitted the vtable for the type somewhere (the
> C++ standard requires this - if you odr use the type, all the virtual
> functions must be defined somewhere in the program). The debug info
> emission attempts to reduce the number of times the debug info for the
> type is emitted by piggybacking on this fact - producing the type
> definition only where the vtable is produced.
>
> As it turns out, with this class, the vtable is never emitted. This is
> because the type has no key function (no non-inline virtual function)
> and the ctor itself is never emitted, so the vtable is never needed...
> and thus no debug info.
>
> The right way to fix this is to stop relying on undefined type punning
> - though I don't know enough about the APIs here to say just how to
> achieve that goal.
>
> On Fri, Jan 30, 2015 at 8:55 PM, reed kotler <rkotler at mips.com
> <mailto:rkotler at mips.com>> wrote:
>
> When trying to display and do anything with a variable of type
> IntrinsicInst, gdb thinks that it's an incomplete
> type and kind find any member functions or even display the class.
>
>
>
>
> (gdb) list 1337
> 1332
> 1333 // Finish off the call including any return values.
> 1334 return finishCall(CLI, RetVT, NumBytes);
> 1335 }
> 1336
> 1337 bool MipsFastISel::fastLowerIntrinsicCall(const
> IntrinsicInst *II) {
> 1338 switch (II->getIntrinsicID()) {
> 1339 default:
> 1340 return false;
> 1341 case Intrinsic::bswap: {
> (gdb) print II
> $10 = (const llvm::IntrinsicInst *) 0x61b8ec8
> (gdb) print *II
> $11 = <incomplete type>
> (gdb) call II->getIntrinsicID()
> Couldn't find method llvm::IntrinsicInst::getIntrinsicID
> (gdb)
>
>
> However, up the call tree:
>
> (gdb) frame 3
> #3 0x000000000368db6d in llvm::FastISel::selectOperator
> (this=0x6235290,
> I=0x61b8ec8, Opcode=49)
> at
> /home/rkotler/workspace/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp:1535
> 1535 return selectCall(I);
> (gdb) list 1535
> 1530
> 1531 // Dynamic-sized alloca is not handled yet.
> 1532 return false;
> 1533
> 1534 case Instruction::Call:
> 1535 return selectCall(I);
> 1536
> 1537 case Instruction::BitCast:
> 1538 return selectBitCast(I);
> 1539
> (gdb) call I->dump()
> %2 = call float @llvm.powi.f32(float %0, i32 %1)
> (gdb)
> (gdb) print *I
> $12 = {<llvm::Value> = {
> _vptr$Value = 0x60c67f0 <vtable for llvm::CallInst+16>, VTy =
> 0x61035c0,
> UseList = 0x61d3310, NameAndIsUsedByMD = {Value = 0},
> SubclassID = 68 'D',
> HasValueHandle = 0 '\000', SubclassOptionalData = 0 '\000',
> SubclassData = 0, NumOperands = 3, static MaximumAlignment =
> 536870912},
> OperandList = 0x61b8e80}
> (gdb)
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu>
> http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150130/e506ab25/attachment.html>
More information about the llvm-dev
mailing list