[LLVMdev] VMkit AOT build problem: llc crushed on glibj compilation to native(.s) file

Allan Tong actong88 at gmail.com
Tue Aug 3 18:50:20 PDT 2010


Well, I think there is a bug in vmkit for always trying to do pointer
arithmetic using i32 instead of the target's pointer size, which is
what my patch addressed.

As for whether there is a bug in LLVM, I'm not sure.  I've played
around with it some more, and it looks like zext expressions get
constant folded before reaching LowerConstant.  The only way I've
triggered the unreachable condition is to make a pointer->i32->pointer
constant expression on a 64bit machine, similar to what vmkit was
doing.  Attached is a test case.  The commented out expressions don't
trigger the unreachable condition, nor does a simple zext expression.

Is the pointer->i32->pointer case a valid use case?  It seems like
such instances would be errors in the user's code, and that it may not
be so bad that LLVM will error on them.

 - Allan

On Tue, Aug 3, 2010 at 4:35 PM, nicolas geoffray
<nicolas.geoffray at gmail.com> wrote:
> Hi Allan,
> Thanks for the fix! So is this a bug in LLVM? Can you reduce that to a small
> test case and file a bug?
> Nicolas
> 2010/8/2 Allan Tong <actong88 at gmail.com>
>>
>> On Mon, Jul 19, 2010 at 7:40 PM, Minas Abrahamyan <minas.subs at gmail.com>
>> wrote:
>> > Trying to build AOT version of vmkit java,
>> > building for that classpath glibj.zip:
>> >
>> > $ cd vmkit/tools/vmjc/libvmjc
>> > $ make ENABLE_OPTIMIZED=1 DISABLE_ASSERTIONS=1 REQUIRES_FRAME_POINTER=1
>> >
>> > has eventually, after 50 minutes, brought:
>> > <<<
>> > llvm[0]: Compiling glibj.zip to llvm
>> > llvm[0]: Optimizing glibj.zip
>> > llvm[0]: Compiling glibj.zip.bc to native
>> > UNREACHABLE executed!
>> > 0  llc             0x0000000000c0e04f
>> > 1  llc             0x0000000000c0fc4a
>> > 2  libpthread.so.0 0x0000003b6400f0f0
>> > 3  libc.so.6       0x0000003b634326c5 gsignal + 53
>> > 4  libc.so.6       0x0000003b63433ea5 abort + 373
>> > 5  llc             0x0000000000bf07e4
>> > llvm::llvm_unreachable_internal(char const*, char const*, unsigned
>> > int) + 356
>> > 6  llc             0x00000000008f353d
>> > 7  llc             0x00000000008f3614
>> > 8  llc             0x00000000008f85e2
>> > 9  llc             0x00000000008f894e
>> > 10 llc             0x00000000008fa586
>> > llvm::AsmPrinter::EmitGlobalVariable(llvm::GlobalVariable const*) +
>> > 550
>> > 11 llc             0x00000000008f412f
>> > llvm::AsmPrinter::doFinalization(llvm::Module&) + 63
>> > 12 llc             0x0000000000ba0369
>> > llvm::FPPassManager::doFinalization(llvm::Module&) + 57
>> > 13 llc             0x0000000000ba691f
>> > llvm::FPPassManager::runOnModule(llvm::Module&) + 95
>> > 14 llc             0x0000000000ba644e
>> > llvm::MPPassManager::runOnModule(llvm::Module&) + 462
>> > 15 llc             0x0000000000ba655d
>> > llvm::PassManagerImpl::run(llvm::Module&) + 125
>> > 16 llc             0x000000000051dca0 main + 2672
>> > 17 libc.so.6       0x0000003b6341eb1d __libc_start_main + 253
>> > 18 llc             0x000000000051bb19
>> > Stack dump:
>> > 0.      Program arguments:
>> > /home/mn/tests/VMkit/llvm/Release-Asserts/bin/llc
>> > -relocation-model=pic -disable-fp-elim glibj-optimized.zip.bc -o
>> > glibj.zip.s
>> > 1.      Running pass 'Function Pass Manager' on module
>> > 'glibj-optimized.zip.bc'.
>> > make: *** [glibj.zip.s] Aborted (core dumped)
>> >>>>
>> >
>> > File sizes: glibj.zip.bc (93Mb), glibj-optimized.zip.bc (93Mb),
>> > glibj-optimized.zip.s  was ~>190Mb when this crush occurred.
>> >
>> > How this can be corrected?
>>
>> Attached patch should fix the issue.  The unreachable condition was
>> caused by a constant expression involving an inttoptr from i32.  This
>> results in a zext to 64 bits, but apparently LowerConstant in
>> AsmPrinter doesn't handle constant expressions involving zext.  Aren't
>> zext constant expressions supported by LLVM?
>>
>>  - Allan
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: test.ll
Type: application/octet-stream
Size: 356 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100803/f98991de/attachment.obj>


More information about the llvm-dev mailing list