<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/62509>62509</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AggressiveInstCombine] LLVM ERROR: Instruction does not dominate all uses
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ericliuu
</td>
</tr>
</table>
<pre>
Below is an input that causes an LLVM ERROR crash after the aggressive instruction combine pass. The crash only occurs when the x86_64 target triple is specified
Reproducer: https://godbolt.org/z/KsYcvMd8T
Crashing input before aggressive-instcombine:
```llvm
define i64 @load64le_nop_shift.SM0(ptr nocapture %arg) local_unnamed_addr #0 {
%g1 = getelementptr inbounds i8, ptr %arg, i64 1
%g6 = getelementptr inbounds i8, ptr %arg, i64 6
%g7 = getelementptr inbounds i8, ptr %arg, i64 7
%ld0 = load i8, ptr %arg, align 1
%ld1 = load i8, ptr %g1, align 1
%ld6 = load i8, ptr %g6, align 1
%ld7 = load i8, ptr %g7, align 1
%z0 = zext i8 %ld0 to i64
%z1 = zext i8 %ld1 to i64
%z6 = zext i8 %ld6 to i64
%z7 = zext i8 %ld7 to i64
%g2.i = getelementptr inbounds i8, ptr %arg, i64 8
%ld2.i = load i8, ptr %g2.i, align 1
%z2.i = zext i8 %ld2.i to i64
%s1.i = shl nuw nsw i64 %z7, 8
%s2.i = shl nuw nsw i64 %z2.i, 16
%1 = or i64 %s1.i, %s2.i
%o7.i = or i64 %1, %z6
%s0 = shl nuw nsw i64 %z0, %o7.i
%s1 = shl nuw nsw i64 %z1, 8
%o7 = or i64 %s0, %s1
ret i64 %o7
}
```
After aggressive-instcombine:
```llvm
define i64 @load64le_nop_shift.SM0(ptr nocapture %arg) local_unnamed_addr {
%g6 = getelementptr inbounds i8, ptr %arg, i64 6
%g7 = getelementptr inbounds i8, ptr %arg, i64 7
%ld0 = load i16, ptr %arg, align 1
%1 = zext i16 %ld0 to i64
%2 = shl i64 %1, %o7.i
%ld6 = load i8, ptr %g6, align 1
%ld7 = load i16, ptr %g7, align 1
%3 = zext i16 %ld7 to i64
%4 = shl i64 %3, 8
%z6 = zext i8 %ld6 to i64
%o7.i = or i64 %4, %z6
ret i64 %2
}
```
Stack dump:
```shell
Instruction does not dominate all uses!
%o7.i = or i64 %4, %z6
%2 = shl i64 %1, %o7.i
LLVM ERROR: Broken module found, compilation aborted!
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /opt/compiler-explorer/clang-trunk/bin/opt -o /app/output.s -S -passes=aggressive-instcombine -mtriple x86_64 <source>
#0 0x0000555688b3b5ff llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-trunk/bin/opt+0x30745ff)
#1 0x0000555688b39074 SignalHandler(int) Signals.cpp:0:0
#2 0x00007f993ba0c420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
#3 0x00007f993b4d900b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4300b)
#4 0x00007f993b4b8859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
#5 0x00005556861691fc llvm::UniqueStringSaver::save(llvm::StringRef) (.cold) StringSaver.cpp:0:0
#6 0x0000555688a921fe (/opt/compiler-explorer/clang-trunk/bin/opt+0x2fcb1fe)
#7 0x00005556884b8e6c (/opt/compiler-explorer/clang-trunk/bin/opt+0x29f1e6c)
#8 0x000055568626c016 llvm::detail::PassModel<llvm::Module, llvm::VerifierPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-trunk/bin/opt+0x7a5016)
#9 0x0000555686277aff llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool) (/opt/compiler-explorer/clang-trunk/bin/opt+0x7b0aff)
#10 0x0000555686181dc3 main (/opt/compiler-explorer/clang-trunk/bin/opt+0x6badc3)
#11 0x00007f993b4ba083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#12 0x000055568626b1de _start (/opt/compiler-explorer/clang-trunk/bin/opt+0x7a41de)
Compiler returned: 139
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWEmP2zgW_jX0hbBBUfvBB9diTNApdKEq08CcDEp8kjmhSQ1J1ZJfP6AklyUvjeryJYATJ-R739s_PZlZK2oFsETxDYrvZqx1W22WYEQpRdvOCs3flzcg9SsWFjOFhWpah92WOVyy1kJ3-P37Xw_4_unpzydcGma3mFUODHZbwKyuDVgrXgALZZ1pSye0wqXeFUIBbpi1C_xjC4OiVvId67JsjcWvW1AdxluWbJIIO2ZqcNgZ0Ujw7tgGSlEJ4IjcIbJ6gsZo3pZgULjCW-cai8IVomtE17XmhZZuoU2N6PoXous_7H_Klwee_eiV-79vvRNC1UOYBVTajGOY-xgG3z12r5qQ_iPly64_4lD56EQSYRQRqRlPIgkbpZuN3YrKLZ4fCKJZ4wxWumSNaw1gRGPm3cux1CWTm1YptgO-YZwbjGhIMEpvenzshesAo_AO1-BAwg6U83BCFbpV3GKRIXqL_dEe97bzJxgjJF9BSMYI6VcQ0hGC5KSD8Ek6q8CkqNXEbcmDCyp1cEkjuaSRXNJIL2mk5zV-9XH8gjeHRbYPzWkf8VgsOBULpmJeKjmVSs6Apadi6alYTRfiK3XKJgnZg5xJCV2IC0nZK01c9IcnTtpgELVbiVX7ipV97SfIx-nhx-5Y-jfSgzvBuFP7tGuzF_LmvNCAdUi9Tgfkg2wwCP4aA1py0T4Z5D3UJMKLGsFxfDo99ncPaj_ya8Dtb_UwUii9OyKlMb2tOlr-LehsymS_HQ8FyWeIaDzKQXJx5OlH2Y_66ag_rmWpidOXaCo84_MZyoiOfQ6PO_STFHVmnKKTcRp1Mv1MIz87Vv7EvN01p21rtyBlf_ZttHFwDRYr7TDXO6GYA8ykxH6DQTT4p_5-rqiHtcgvJDdG_wSFd5q3EnDlO9NrlHrXCMk6H1mhjQP-4dDj9_vV8z22bbETDjNctDU20GjjfJ6PNhzhtm2xKPUO0XU3uv3XvDH6v1A6RNfC2taHu8ZMcSxUKVsO3YbVL18FK386w0pYXMwyWSCSPxpdG7bDzNStnzXvBEZ0rRtvpQ8IzBzeGqkNGH8mmarnzrTqJ6LrQqheGs-112NN4__fuqZ1C4vnz3ju90KwKLw7T1Z4vhvWwGE3ROGt1a0pAYX3H1QeEkzeCCEkjuMky4qwiKsKd7kJVyhc2Xfb_-PRCOW6aH_48BHNDkKGvW60dQbYDtFuwIRyntUQzb4SM6I35C0kaRRXFaL5wdngyNmcpBF-FrVi8l9McelBs8F2f2wXZeNLQ7o_H0B0AEqrPA8LRsqIErzZGLBOG9gYN7guRYHouk_gXArVvs1r1fYXjdsaYHxh9YJ0HgdRRMnE33BiJuI5IQU2TFj4BH7pkZMOOQoJKSbI0RS5yLI472fjnyFTmsX5BDke5zgJkjyoylFD_FuJ_7Xw7IxQ9TN76V4kfJ-wl2lP9BJPUA19sCi15F1dDqrna5NMisxyGlRwVSfRqiyCCiZRphMjUZFBUl5nJK8CSMqJkWySSpqUJEhGqeTgmJDDeDFrHzQHicLbg8RDR4R-oA5nf4HxL3TGa0xvHg1YMC_AV4rJ9461x9f9qbAPTLHa1-3UUHjffbqZbtWknntXkq-Aeq3r2CBlMfHP7lF282l205RNmMu0yqfoUTQg_e52oTnHwVyI8Uf3Uv3Aym2Hszp3-10Uhpn3b6rS33aNPJXSWv7ZsfdayDMgV11fCGdlDHv3p-OidDmRbS1UV5ixvG7cxmk9dGRv7w_RP4IvSe27cS9X-JtPf1_ZEwVhoweEfz6QKXllAS9DvGNCXWUoKRgvw4mh4Ih_GclCvNl4ct1Yx4zbjKx-losjkk2t0CMCKQIOuMe_cpqigB8I8XZQ9ztmaxRwv6wEYX60Nc74MuR5mLMZLIMkC0ke52E82y4jCKosDyivGC-rOM9LlvCwICFlaZCmdCaWlNCQxCQkSZjF8YJxxniQFyxKg7goExQR2DEhF77PFtrUs24RWyY0JvlMsgKk3f_-Zpbdzla0tfVvWsI6e1Bzwsnul7rVx1LkN9zb4QUuvsPTjfNz6--sNXL59V2yi-L_AQAA__8j3fNV">