<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/142830>142830</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
LLVM crash "Instruction does not dominate all uses" introduced recently
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
alexfh
</td>
</tr>
</table>
<pre>
A recent commit (around 62fd4d18e52e61fe1e67cbf9d1c4355a34f84325 - 24b97756decb7bf0e26dcf0e30a7a9aaf27f417c, but I haven't yet pinpointed the culprit) introduced a crash in LLVM: https://gcc.godbolt.org/z/YT8dcvY9e
```
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%struct.foo = type { %struct.eggs }
%struct.eggs = type { [2 x float] }
define float @wibble.1(ptr %arg) {
bb:
%load = load float, ptr %arg, align 4
ret float %load
}
define i64 @foo.2() {
bb:
%load = load i64, ptr inttoptr (i64 8 to ptr), align 8
ret i64 %load
}
define ptr @ham.3(ptr %arg, i64 %arg1) {
bb:
%load = load ptr, ptr %arg, align 8
%getelementptr = getelementptr %struct.foo, ptr %load, i64 %arg1
ret ptr %getelementptr
}
define float @wombat(ptr %arg) {
bb:
%call = call float @eggs(ptr %arg)
ret float %call
}
define float @eggs(ptr %arg) {
bb:
%call = call float @barney(ptr %arg)
ret float %call
}
define float @barney(ptr %arg) {
bb:
%load = load float, ptr %arg, align 4
ret float %load
}
define float @bar.4(ptr %arg) {
bb:
%call = call float @wombat.5(ptr %arg)
ret float %call
}
define float @wombat.5(ptr %arg) {
bb:
%call = call float @wombat(ptr %arg)
%fneg = fneg float %call
ret float %fneg
}
define <2 x float> @barney.6(ptr %arg, ptr %arg1) {
bb:
%load = load float, ptr %arg1, align 4
%call = call float @wibble.1(ptr %arg)
%fsub = fsub float %load, %call
%fcmp = fcmp oeq float %fsub, 0.000000e+00
br i1 %fcmp, label %bb2, label %bb3
bb2: ; preds = %bb3, %bb
ret <2 x float> zeroinitializer
bb3: ; preds = %bb
%call4 = call float @wibble.1(ptr %arg)
%fsub5 = fsub float 0.000000e+00, %call4
%fmul = fmul float %fsub5, 0.000000e+00
%fcmp6 = fcmp olt float %fmul, 0.000000e+00
br i1 %fcmp6, label %bb7, label %bb2
bb7: ; preds = %bb3
%load8 = load <2 x float>, ptr %arg, align 4
ret <2 x float> %load8
}
define double @snork(ptr %arg, ptr %arg1) {
bb:
%alloca = alloca %struct.foo, align 4
%call = call <2 x float> @barney.6(ptr %arg, ptr %arg1)
store <2 x float> %call, ptr %alloca, align 4
%call2 = call float @bar.4(ptr %alloca)
%fpext = fpext float %call2 to double
ret double %fpext
}
define double @pluto(ptr %arg) {
bb:
br label %bb1
bb1: ; preds = %bb4, %bb
%phi = phi i32 [ 0, %bb ], [ %add, %bb4 ]
%phi2 = phi double [ 1.000000e+00, %bb ], [ %select, %bb4 ]
%zext = zext i32 %phi to i64
%call = call i64 @foo.2()
%icmp = icmp ugt i64 %call, %zext
br i1 %icmp, label %bb4, label %bb3
bb3: ; preds = %bb1
ret double %phi2
bb4: ; preds = %bb1
%call5 = call ptr @ham.3(ptr %arg, i64 %zext)
%add = add nsw i32 %phi, 1
%zext6 = zext i32 %add to i64
%call7 = call i64 @foo.2()
%urem = urem i64 %zext6, %call7
%call8 = call ptr @ham.3(ptr %arg, i64 %urem)
%call9 = call double @snork(ptr %call5, ptr %call8)
%fcmp = fcmp ogt double %phi2, 0.000000e+00
%select = select i1 %fcmp, double %call9, double 0.000000e+00
br label %bb1
}
```
```
Instruction does not dominate all uses!
%indvars.iv.next = add i64 %indvars.iv, 1
%sunkaddr16 = mul i64 %indvars.iv.next, 8
in function pluto
fatal error: error in backend: Broken function found, compilation aborted!
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0. Program arguments: /opt/compiler-explorer/clang-assertions-trunk/bin/clang++ -gdwarf-4 -g -o /app/output.s -mllvm --x86-asm-syntax=intel -fno-verbose-asm -S --gcc-toolchain=/opt/compiler-explorer/gcc-snapshot -fcolor-diagnostics -fno-crash-diagnostics -xir -O3 <source>
1. Code generation
2. Running pass 'Function Pass Manager' on module '<source>'.
3. Running pass 'Module Verifier' on function '@pluto'
#0 0x0000000003fd31e8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3fd31e8)
#1 0x0000000003fd0e74 llvm::sys::CleanupOnSignal(unsigned long) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3fd0e74)
#2 0x0000000003f16136 llvm::CrashRecoveryContext::HandleExit(int) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3f16136)
#3 0x0000000003fc861e llvm::sys::Process::Exit(int, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3fc861e)
#4 0x0000000000db7010 LLVMErrorHandler(void*, char const*, bool) cc1_main.cpp:0:0
#5 0x0000000003f20f13 llvm::report_fatal_error(llvm::Twine const&, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3f20f13)
#6 0x0000000003f21071 (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3f21071)
#7 0x00000000039c7fe2 (anonymous namespace)::VerifierLegacyPass::runOnFunction(llvm::Function&) Verifier.cpp:0:0
#8 0x0000000003911bbf llvm::FPPassManager::runOnFunction(llvm::Function&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3911bbf)
#9 0x0000000003911f71 llvm::FPPassManager::runOnModule(llvm::Module&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3911f71)
#10 0x0000000003912811 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3912811)
#11 0x0000000004291169 clang::emitBackendOutput(clang::CompilerInstance&, clang::CodeGenOptions&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4291169)
#12 0x0000000004988ac1 clang::CodeGenAction::ExecuteAction() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4988ac1)
#13 0x0000000004c81405 clang::FrontendAction::Execute() (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4c81405)
#14 0x0000000004bfea3e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4bfea3e)
#15 0x0000000004d735c9 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x4d735c9)
#16 0x0000000000db970f cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xdb970f)
#17 0x0000000000db031a ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#18 0x00000000049ef259 void llvm::function_ref<void()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#19 0x0000000003f16074 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x3f16074)
#20 0x00000000049ef86f clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#21 0x00000000049b13bd clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x49b13bd)
#22 0x00000000049b244e clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x49b244e)
#23 0x00000000049ba545 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0x49ba545)
#24 0x0000000000db5c1f clang_main(int, char**, llvm::ToolContext const&) (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xdb5c1f)
#25 0x0000000000c3a524 main (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xc3a524)
#26 0x00007437c8629d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#27 0x00007437c8629e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#28 0x0000000000dafdc5 _start (/opt/compiler-explorer/clang-assertions-trunk/bin/clang+++0xdafdc5)
clang++: error: clang frontend command failed with exit code 70 (use -v to see invocation)
Compiler returned: 70
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzkWk1v2zqz_jXKhpBBUd-LLBynubcHLVo0RYF3ZVDSSOGtROqQVD766y9ISdaH7TQ5J-nmDdKGJjnDZ54ZDoeSqVKs4gCXTnjlhNcXtNN3Ql7SGh7Lu4tMFE-XWyQhB65RLpqGaeSQhErR8QJFpCyCwksgJBB5JXgQxXlWpoWXB34YUj8ok8AnIXIRCbI0jsOogDyLsxIDiYq8xOBjGtOU0pLEZeDFuUN2KOs0-oju6D1wh8QaPYFGLeOtYFxDgfQdoLyrW8m0Q1LEuJai6HIoEEW5pOoOMY4-ffrx2fG36E7rVjn-1iE3Drmp8nxTiSITtd4IWTnk5pdDbv7zPSny-_-k4OCt-Y3w8Iu3msoKNCqopjV9Ep1Gjn-NHELAbRx_C25LYuz4W5_Y_8xHb_nRtKLA_ueyQ8MjieNvPZK4ZYKHFrdd0SgeBe6tmUbIhENL1tYwYnhMon0UuB3_ycUDd2vGu0e34l0vYn5JqLTscr0phbBS-qkF5MRXaBqCqlLIia8X8_vOhUB4RdAjKmtBtRNejxJ4W0DJOPQDyAnwA8uyGjaeQ5JWS7MQNUynRouDt1lmvIG3yIzUghZ2GdvodZMdmsvtEK1ZxVFgZSTocaVe2mBYIWFRYHCUQmyIYwh8wdLGM8PCjGstegSJUZUgLcyAQ9IJTXJAY1c7i8XqCfAdbTb-ipDdKEpl5b0IpAVxmp1klKhAQw0NcG2n-ddo1TMPiZk2i3-FaTRxmLJQdMLWKQJEkxlH_t7_Oa1rC9I2DgpM9K3Fj91vZJ6DcUrLK0BkVHJ4-vcwTuv5Y7thjmMT_A7GeTp6p27Cf0_IOU2v8M3pCBuFSg6VFbKNNa4VWjPnBFrH303pzv8wOXITHe3j6dPL9vEJz3pr1z5j-5n8erBedVlvvWksw4PsFkSY2XnT9rNNQ8DfM2ZUlxkJvMH2BxxyhbEVzCRi3ihu5tQ0g9p0ZBlZffZ7Xs2Av0Wv-nH8K9RKKNRw4lltvQ1ZdnDl2lW_QArGmWa0Zr9Ajsv7ZvkTGud0B6_ke2ApXPO9omyi_eDcsul659rGgvPwDOkD3dHMXfU8kJuufom7opV_4iP_DYTFb-Ov2RZIpj2wctrv89zRhhxUnti7hegyUyUFWHEhf75yv5qRuhY5tWDH5vrYfHav_vPkYfUpLeSJDDRs3JmMxXYGDTl9pC2OgEF-Sh0tPPYVbt9apE5i6qCe2oNTRqYH0Wd90dadFr_L-Zmch6I3hqL3FqEYLFOHQ8L2jtlh85f5xNS4CB9mISe8th9CWy7TojgMBXZs0kIOakZ7wyvknUoCR2oV1JDr05p_je6wDYuwB62FrVhPHdjH1e-ojY2p3ja66lC7jmE1rLhMGew4wwfnMvy5FOudCBjD2igXPCs3IAwnG19SVVtLJuNp0R_A5i9XDzMyjYw3Zzw6otwIHVEev4TzTkJj59nGDFo0OxTiuZnJ68w0emfrGbl00nA2E1pCZ6nErjzPBMuyoDry3Nkjqo9nKzs0l5XCpMdinXWdPrjW6aDPL7Mr-urjR94naiY4KgQoxIUB3zBONZh0jjoFyiHe4ErGi3sq1Ybdb_i43Yy_B36n4UWcqI7_pEUhvT5YzBl-JGD1GSlzRjGOyo73sPpMiLcl1bRGIKWQZgPYBmIcZTT_CbwwfVdS_ISZaCk6btNQLpqW1dR20kxIDUVv09dPH7a3H5DqsoZpRFHWVUhCK6Q2Ibx6HML0XZdtctE45Kau78c_bivF_9msdMOU6gxdN4jyAjGe110B_SMY-6jFYNWS5mCDSUIrRQ5KQYGU6GTfbSSpUiJnVEOBZMeRyiVr9cbB21tN85-o6Jq2PwLwxsHpVykqSRtEZdWZC6eyCYLciNZg6m0H6cJjWwsJ0vTVlFcuVQqk4US5Wnb8p0NuMsbHYYdcOeQKuVXxQGXpBsitkCuMXtq2Rnun205vFHIbwwJy3cckcqlqXPXENX10_GvGNdTILblw70FmQoEZR-4tct0qz10tRJ3fUcYd__pZvGay4rRVd0Ijt8xFLaRbMFpxoTTLVb-G5XjZ_cgkcr_4pjwYGPY_OHjrGdp2ogBUAQdpA8PBW2K6v3WcM16hliqFHBLfjNH01XR8ppxWBlOMBEeNKDq7PePFAiQ2vvJPafvcS_wAyUp20HOIWKPpcPjH_abzMcKPePzxy8L3IEE2AP2t42_Vk-obXyXj2kbI9z7GkmmSpA97obQE2jjEplPG7QNBm4HfJFRMInoc4B0qft9bgccQB6fA72qgvGu_8FtWcVo7JOm4fdhaoFrw6n2gGjATVLKE6kWeH82g7kx4fYNc3IN82gmuTcKyI_9LeVHDh0dmLtnvxauFM4H1l2DzJPLgdFDYFNN_mEPcoUyI-l2gWjAT1GAOFRdZjD1sHzl_MDm8J086JLkXrHDI1ibsOypRLrjSQ8eINc-9fUMZ3-StSYHY_uuXCZeMEFx6_oyRPq3v7TGy74-R-Qb5_mAK8GHJ6F3pscgmeqIVbg_H3jssatROi8aLRdM8LoHYdxVc8KdGdApx2oBqbR5Je4rGpPUJKpo_mXQ4MNvxL3xMkwtSp04TuYesd8J5yRKP52VZOXPezVez3Jh8X7fqW1PZg5uoTNfQy9h7AfT-JFgAH7veC3Y5RoDJy3gFmyTeHHZtnTzkkMmAj01bH4z4k-ANvAn84lQJSOp5UYp6KQsGGqav-sLwi61THJLMhncDJFP-Up7DsOMXMwr4H-BfWgtvGJ-MvdWS8eoblMvukYPtStsAZTuE5VzkI9eyU-wevkG54_qrlo6_m4bvy2GT3bAabp-UhmZ4AKR00Y90nP3dwb5dSZoTv32QTMN-PPdnQgWUtKv1voAaNPxG0P8wrHls0k5w1TXGp9t38Pvg2cnviyM6SJOE5t4Jtw1ED2ce5J2GkfvkPWD2QCaYi8M5yBMvwOEc5o005cMhIOY43wlhj2FCuDiTg6wE6gN6boec5PK8Se-SBgackxWLIz8oYj_MF2lgwDsZcy9yeoz9OB28SzD3-Cb00aouSmNcHgqcRW7dSkmfTLbxd8vKaNiW62rpUEm9uRE9ysmGeGUD9j2KRtp33ndbQ80suW1oXf-AXIvhKDlh0CrXGh1DuT2rz1JUSHZ_VEsYTMkySUBJwtRSMlM63rj20rLaE2avLSbZmRk5rWtzX9-X3KCcoqVfd4icnbcTTUN5sd7EJ513SL_Cniu0XiTe6VA5JNyDwH6fPz56Xv8ho4rlJjkzg8kyuJhsOvZaUqbVOLxS1z_M1kLOxs2UWa1to6fn24o4JK5pkxXUXEwPVJFkvJ39JbITvkjXdyq8uP6dv1N96_gtLaF-WnB5wm1oBuZdrl14vCOaKyJex1YSlei_OTgM45uWSr3BZ6OALMu1NPP8rDjL2vSsbp3ELZWLzL0SNBMWd7iXTd2ubnwHw962SLBmT6G0qmUyEgTwWlL-Epk6z8hfIvvElF4w8lwqPkRAS5lx_vCc4KUkDmHyR6g0ZE1U-isqaRiE52Bfz9qL-uBEYXDOBX-QyncoVi09E3nrxzNh7g0pbSxERvA2lWyHRPD7A_rNSw-DbMK9KP5w7tOQBMggfuuFe9XTwmPdFgd-nCcRSYsUD2vWLHPIzfBVw9lXDM1AvlFiE1mNVmRSGK8VQoDRfm9k9kpTqfczs168BASzJZKlk2lZ5CHqlb-5n6zyfun52PjSxjRsPyqHO4P9rqyJ_5KyGgr0wPQdgkdmwqkAFFt2OwXIvUdaIAWA2KyUNwuNJTySoDvJwb4PivHx26-L4tIvUj-lF3DpxUGKIy-J4ou7ywRj4kPqRQmQ0CeQYpL6UVnitCwCnHkX7JJgEuIIB17iezja0DTOojJMijAi2IPUCTA0lNUbszU2QlYX9n3QpReQxMcX9t2csl8dJoTDA7KjDiFOeH0hL-2rpKyrlBPgmimtJjWa6RouP3368Xl4j-QQ8tI3d2T-ld_-q8n100Un68t__nZrMOj-kvx_AAAA__-G7WhQ">