LLVM Bugzilla is read-only and represents the historical archive of all LLVM issues filled before November 26, 2021. Use github to submit LLVM bugs

Bug 37382 - Assertion failure generating thumbv6 code: -- Assertion `TLI.isTypeLegal(HalfType)' failed.
Summary: Assertion failure generating thumbv6 code: -- Assertion `TLI.isTypeLegal(Half...
Status: RESOLVED FIXED
Alias: None
Product: libraries
Classification: Unclassified
Component: Backend: ARM (show other bugs)
Version: trunk
Hardware: PC Windows NT
: P enhancement
Assignee: Unassigned LLVM Bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2018-05-08 12:15 PDT by Alex Crichton
Modified: 2018-07-02 14:21 PDT (History)
4 users (show)

See Also:
Fixed By Commit(s):


Attachments
IR (1.01 KB, text/plain)
2018-05-08 12:15 PDT, Alex Crichton
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Alex Crichton 2018-05-08 12:15:52 PDT
Created attachment 20273 [details]
IR

When attempting to compile the attached IR (reduced with bugpoint) with `llc` it yields:




$ llc foo.ll -filetype=obj -O0
llc: /home/alex/code/rust2/src/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:3432: bool {anonymous}::SelectionDAGLegalize::ExpandNode(llvm::SDNode*): Assertion `TLI.isTypeLegal(HalfType)' failed.
Stack dump:
0.	Program arguments: ./build/x86_64-unknown-linux-gnu/llvm/bin/llc -filetype=obj -O0 bugpoint-reduced-simplified.ll 
1.	Running pass 'Function Pass Manager' on module 'bugpoint-reduced-simplified.ll'.
2.	Running pass 'ARM Instruction Selection' on function '@_ZN3lib3ptr19swap_nonoverlapping17he2ab85414b948373E'
#0 0x00007f202a6e7dda llvm::sys::PrintStackTrace(llvm::raw_ostream&) (/home/alex/code/rust2/build/x86_64-unknown-linux-gnu/llvm/bin/../lib/libLLVM-7svn.so+0x8f8dda)
#1 0x00007f202a6e5b7e llvm::sys::RunSignalHandlers() (/home/alex/code/rust2/build/x86_64-unknown-linux-gnu/llvm/bin/../lib/libLLVM-7svn.so+0x8f6b7e)
#2 0x00007f202a6e5cf2 SignalHandler(int) (/home/alex/code/rust2/build/x86_64-unknown-linux-gnu/llvm/bin/../lib/libLLVM-7svn.so+0x8f6cf2)
#3 0x00007f20296d84b0 (/lib/x86_64-linux-gnu/libc.so.6+0x354b0)
#4 0x00007f20296d8428 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x35428)
#5 0x00007f20296da02a abort (/lib/x86_64-linux-gnu/libc.so.6+0x3702a)
#6 0x00007f20296d0bd7 (/lib/x86_64-linux-gnu/libc.so.6+0x2dbd7)
#7 0x00007f20296d0c82 (/lib/x86_64-linux-gnu/libc.so.6+0x2dc82)
#8 0x00007f202acc83a2 (anonymous namespace)::SelectionDAGLegalize::ExpandNode(llvm::SDNode*) (/home/alex/code/rust2/build/x86_64-unknown-linux-gnu/llvm/bin/../lib/libLLVM-7svn.so+0xed93a2)
#9 0x00007f202acb5041 (anonymous namespace)::SelectionDAGLegalize::LegalizeOp(llvm::SDNode*) (.part.276) (/home/alex/code/rust2/build/x86_64-unknown-linux-gnu/llvm/bin/../lib/libLLVM-7svn.so+0xec6041)
#10 0x00007f202acc8952 llvm::SelectionDAG::Legalize() (/home/alex/code/rust2/build/x86_64-unknown-linux-gnu/llvm/bin/../lib/libLLVM-7svn.so+0xed9952)
#11 0x00007f202adee224 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/home/alex/code/rust2/build/x86_64-unknown-linux-gnu/llvm/bin/../lib/libLLVM-7svn.so+0xfff224)
#12 0x00007f202adf3e6a llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/home/alex/code/rust2/build/x86_64-unknown-linux-gnu/llvm/bin/../lib/libLLVM-7svn.so+0x1004e6a)
#13 0x00007f202adf608c llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (.part.875.constprop.898) (/home/alex/code/rust2/build/x86_64-unknown-linux-gnu/llvm/bin/../lib/libLLVM-7svn.so+0x100708c)
#14 0x00007f202bdc79d4 (anonymous namespace)::ARMDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/home/alex/code/rust2/build/x86_64-unknown-linux-gnu/llvm/bin/../lib/libLLVM-7svn.so+0x1fd89d4)
#15 0x00007f202a9fc375 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/home/alex/code/rust2/build/x86_64-unknown-linux-gnu/llvm/bin/../lib/libLLVM-7svn.so+0xc0d375)
#16 0x00007f202a7f4403 llvm::FPPassManager::runOnFunction(llvm::Function&) (/home/alex/code/rust2/build/x86_64-unknown-linux-gnu/llvm/bin/../lib/libLLVM-7svn.so+0xa05403)
#17 0x00007f202a7f44cc llvm::FPPassManager::runOnModule(llvm::Module&) (/home/alex/code/rust2/build/x86_64-unknown-linux-gnu/llvm/bin/../lib/libLLVM-7svn.so+0xa054cc)
#18 0x00007f202a7f3f6d llvm::legacy::PassManagerImpl::run(llvm::Module&) (/home/alex/code/rust2/build/x86_64-unknown-linux-gnu/llvm/bin/../lib/libLLVM-7svn.so+0xa04f6d)
#19 0x00000000004196a0 compileModule(char**, llvm::LLVMContext&) (.constprop.391) (./build/x86_64-unknown-linux-gnu/llvm/bin/llc+0x4196a0)
#20 0x000000000040c266 main (./build/x86_64-unknown-linux-gnu/llvm/bin/llc+0x40c266)
#21 0x00007f20296c3830 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x20830)
#22 0x000000000040c409 _start (./build/x86_64-unknown-linux-gnu/llvm/bin/llc+0x40c409)
Comment 1 Alex Crichton 2018-07-01 15:49:16 PDT
A bisection of this issue turned up r322738 (https://reviews.llvm.org/D40922) as the cause
Comment 2 Roger Ferrer Ibanez 2018-07-02 05:04:03 PDT
Looks like `{S,U}MUL_LOHI` are expanded in Thumb1 so a stop-gap approach could be not implementing this optimisation in that subtarget.
Comment 3 Vadzim Dambrouski 2018-07-02 12:04:36 PDT
I've implemented proposed fix in https://reviews.llvm.org/D48846
Comment 4 Vadzim Dambrouski 2018-07-02 14:21:17 PDT
Fixed in r336144.