llvm / llvm/llvm-project

[SelectionDAG][X86] Crash scalarizing `llvm.ldexp` with a legal `<1 x i1>` exponent under AVX-512

Open
#219,695 4 comments 0 reactions 0 assignees View on GitHub
backend:X86 confirmed crash-on-valid llvm:SelectionDAG
Dominant language
LLVM
Stars
40.5k
Forks
18.7k
PR merge metrics
PR metrics pending

Description

### Reproducer

```llvm
declare <1 x float> @llvm.ldexp.v1f32.v1i1(<1 x float>, <1 x i1>)

define <1 x float> @test(<1 x float> %x, <1 x i1> %e) {
entry:
%r = call <1 x float> @llvm.ldexp.v1f32.v1i1(<1 x float> %x, <1 x i1> %e)
ret <1 x float> %r
}
```

```
$ llc repro.ll
$ echo $?
0
$ llc repro.ll -mattr=+avx512f -o /dev/null
llc: llvm-project/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h:161: const SDValue &llvm::DAGTypeLegalizer::getSDValue(TableId &): Assertion `Id && "TableId should be non-zero"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace and instructions to reproduce the bug.
Stack dump:
0. Program arguments: llc repro.ll -mattr=+avx512f -o /dev/null
1. Running pass 'Function Pass Manager' on module 'repro.ll'.
2. Running pass 'X86 DAG->DAG Instruction Selection' on function '@test'
#0 0x000055d781c848eb llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (llvm-project/build/bin/llc+0x357e8eb)
#1 0x000055d781c818c1 llvm::sys::RunSignalHandlers() (llvm-project/build/bin/llc+0x357b8c1)
#2 0x000055d781c8573b SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
#3 0x00007f7c03bed330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
#4 0x00007f7c03c46c0c pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x9ec0c)
#5 0x00007f7c03bed27e raise (/lib/x86_64-linux-gnu/libc.so.6+0x4527e)
#6 0x00007f7c03bd08ff abort (/lib/x86_64-linux-gnu/libc.so.6+0x288ff)
#7 0x00007f7c03bd081b (/lib/x86_64-linux-gnu/libc.so.6+0x2881b)
#8 0x00007f7c03be3517 (/lib/x86_64-linux-gnu/libc.so.6+0x3b517)
#9 0x000055d781a5ea21 llvm::DAGTypeLegalizer::getSDValue(unsigned int&) LegalizeTypes.cpp:0:0
#10 0x000055d781a79092 llvm::DAGTypeLegalizer::GetScalarizedVector(llvm::SDValue) LegalizeIntegerTypes.cpp:0:0
#11 0x000055d781a9f1ed llvm::DAGTypeLegalizer::ScalarizeVecRes_BinOp(llvm::SDNode*) LegalizeVectorTypes.cpp:0:0
#12 0x000055d781a9af5a llvm::DAGTypeLegalizer::ScalarizeVectorResult(llvm::SDNode*, unsigned int) LegalizeVectorTypes.cpp:0:0
#13 0x000055d781a5f39c llvm::DAGTypeLegalizer::run() LegalizeTypes.cpp:0:0
#14 0x000055d781a63f8f llvm::SelectionDAG::LegalizeTypes() (llvm-project/build/bin/llc+0x335df8f)
#15 0x000055d781a4a474 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (llvm-project/build/bin/llc+0x3344474)
#16 0x000055d781a48f47 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (llvm-project/build/bin/llc+0x3342f47)
#17 0x000055d781a464e2 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (llvm-project/build/bin/llc+0x33404e2)
#18 0x000055d781a43a99 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) (llvm-project/build/bin/llc+0x333da99)
#19 0x000055d7808eaf29 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (llvm-project/build/bin/llc+0x21e4f29)
#20 0x000055d780e9ca70 llvm::FPPassManager::runOnFunction(llvm::Function&) (llvm-project/build/bin/llc+0x2796a70)
#21 0x000055d780ea4d12 llvm::FPPassManager::runOnModule(llvm::Module&) (llvm-project/build/bin/llc+0x279ed12)
#22 0x000055d780e9d84a llvm::legacy::PassManagerImpl::run(llvm::Module&) (llvm-project/build/bin/llc+0x279784a)
#23 0x000055d77ff240ad main (llvm-project/build/bin/llc+0x181e0ad)
#24 0x00007f7c03bd21ca (/lib/x86_64-linux-gnu/libc.so.6+0x2a1ca)
#25 0x00007f7c03bd228b __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28b)
#26 0x000055d77ff20c25 _start (llvm-project/build/bin/llc+0x181ac25)
[1] 2954653 IOT instruction (core dumped) llc repro.ll -mattr=+avx512f -o /dev/null
```

godbolt: https://godbolt.org/z/xev7d5djE

Contributor guide

Open the contributing guide

Research direction

Start by reproducing the crash with llc repro.ll -mattr=+avx512f, then trace the SelectionDAG legalization path through GetScalarizedVector and ScalarizeVecRes_BinOp into LegalizeTypes.h. Done means the provided <1 x i1> llvm.ldexp case completes without the TableId assertion under AVX-512.

Written by the indexing model from the issue text.

Assessment

Domain
compilers
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.