<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/149179>149179</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [DirectX] Crash in DXILFlattenArrays.cpp in visitGetElementPtrInst
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:DirectX
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
            Icohedron
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          farzonl
      </td>
    </tr>
</table>

<pre>
    The crash is because of this line:
https://github.com/llvm/llvm-project/blob/3a6ef8b359fc3f2459ef60013b8938ebe847831b/llvm/lib/Target/DirectX/DXILFlattenArrays.cpp#L348

Didn't debug this but this would indicate that `NewGEP` is not a `GEPOperator`. Likely we need to change an assumption.

LLVM IR repro Case 1:
```llvm
@switch.table = private unnamed_addr constant [4 x i32] [i32 1, i32 257, i32 65793, i32 16843009], align 4

define void @anchor_function() #0 {
entry:
  %switch_ptr = getelementptr inbounds [4 x i32], [4 x i32]* @switch.table, i32 0, i32 0
  %switch_val = load i32, i32* %switch_ptr
 ret void
}
```

LLVM IR repro Case 2:
```llvm
define void @blah() #0 {
entry:
%array_ptr = getelementptr inbounds [3 x float], [3 x float]* @private_array, i64 0, i64 0
 %array_val = load float, float* %array_ptr
 ret void
}
```

Crash stack
```gdb
Stack dump:
0.      Program arguments: /home/kaitlinpeng/llvm-build-debug/bin/llc /home/kaitlinpeng/llvm-project/llvm/test/CodeGen/DirectX/finalize_linkage.ll --filetype=asm -o -
1.      Running pass 'DXIL Array Flattener' on module '/home/kaitlinpeng/llvm-project/llvm/test/CodeGen/DirectX/finalize_linkage.ll'.
#0 0x000055c05a7530c1 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/kaitlinpeng/llvm-project/llvm/lib/Support/Unix/Signals.inc:834:11
#1 0x000055c05a75364b PrintStackTraceSignalHandler(void*) /home/kaitlinpeng/llvm-project/llvm/lib/Support/Unix/Signals.inc:918:1
#2 0x000055c05a751396 llvm::sys::RunSignalHandlers() /home/kaitlinpeng/llvm-project/llvm/lib/Support/Signals.cpp:104:5
#3 0x000055c05a753dcd SignalHandler(int, siginfo_t*, void*) /home/kaitlinpeng/llvm-project/llvm/lib/Support/Unix/Signals.inc:426:38
#4 0x00007f446704e330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
#5 0x00007f44670a7b2c pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x9eb2c)
#6 0x00007f446704e27e raise (/lib/x86_64-linux-gnu/libc.so.6+0x4527e)
#7 0x00007f44670318ff abort (/lib/x86_64-linux-gnu/libc.so.6+0x288ff)
#8 0x00007f446703181b (/lib/x86_64-linux-gnu/libc.so.6+0x2881b)
#9 0x00007f4467044517 (/lib/x86_64-linux-gnu/libc.so.6+0x3b517)
#10 0x000055c057dd4938 decltype(auto) llvm::cast<llvm::GEPOperator, llvm::Value>(llvm::Value*) /home/kaitlinpeng/llvm-project/llvm/include/llvm/Support/Casting.h:579:10
#11 0x000055c057dd0a8a (anonymous namespace)::DXILFlattenArraysVisitor::visitGetElementPtrInst(llvm::GetElementPtrInst&) /home/kaitlinpeng/llvm-project/llvm/lib/Target/DirectX/DXILFlattenArrays.cpp:348:29
#12 0x000055c057dcee9d llvm::InstVisitor<(anonymous namespace)::DXILFlattenArraysVisitor, bool>::visitGetElementPtr(llvm::GetElementPtrInst&) /home/kaitlinpeng/llvm-project/llvm/include/llvm/IR/Instruction.def:174:1
#13 0x000055c057dce4f2 llvm::InstVisitor<(anonymous namespace)::DXILFlattenArraysVisitor, bool>::visit(llvm::Instruction&) /home/kaitlinpeng/llvm-project/llvm/include/llvm/IR/Instruction.def:174:1
#14 0x000055c057dcd735 (anonymous namespace)::DXILFlattenArraysVisitor::visit(llvm::Function&) /home/kaitlinpeng/llvm-project/llvm/lib/Target/DirectX/DXILFlattenArrays.cpp:367:21
#15 0x000055c057dcd019 flattenArrays(llvm::Module&) /home/kaitlinpeng/llvm-project/llvm/lib/Target/DirectX/DXILFlattenArrays.cpp:469:19
#16 0x000055c057dd3029 (anonymous namespace)::DXILFlattenArraysLegacy::runOnModule(llvm::Module&) /home/kaitlinpeng/llvm-project/llvm/lib/Target/DirectX/DXILFlattenArrays.cpp:488:3
#17 0x000055c05973129b (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /home/kaitlinpeng/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1513:23
#18 0x000055c059730e1a llvm::legacy::PassManagerImpl::run(llvm::Module&) /home/kaitlinpeng/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:531:16
#19 0x000055c0597356a1 llvm::legacy::PassManager::run(llvm::Module&) /home/kaitlinpeng/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1640:3
#20 0x000055c057b05c9a compileModule(char**, llvm::LLVMContext&) /home/kaitlinpeng/llvm-project/llvm/tools/llc/llc.cpp:761:9
#21 0x000055c057b03d71 main /home/kaitlinpeng/llvm-project/llvm/tools/llc/llc.cpp:404:13
#22 0x00007f44670331ca (/lib/x86_64-linux-gnu/libc.so.6+0x2a1ca)
#23 0x00007f446703328b __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28b)
#24 0x000055c057b03525 _start (/home/kaitlinpeng/llvm-build-debug/bin/llc+0x3409525)
FileCheck error: '<stdin>' is empty.
FileCheck command line: /home/kaitlinpeng/llvm-build-debug/bin/FileCheck /home/kaitlinpeng/llvm-project/llvm/test/CodeGen/DirectX/finalize_linkage.ll --check-prefixes=CHECK-LLC
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzEWFuT4yYa_TX0C2UXF10f_OBxjydd69l0TbJTeXMhhGS2MagA9SW_fgsk3zSdZDyb7kxNuRGSDuccPj4-wZyTrRZiAdIPgJA7bnaitkYDQkB6e8N6vzN20TD7u9HqpjL1y-LXnYDcMreD0sFKcNY7AU0D_U46qKQWgC4BWu6871xokjUg61b6XV_NudkDslbq8fBn1lnzX8E9IOtKmQqQNWWZaIqKpmXDaUOStBRNhhCmVVHSQlSiSPKC4uoMR4aLX5ltRcC5lVZw_1to_Xa3WSvmvdBLa9mLm_OuA4RuaFIAFEjeyloDkntYi6pvBwlV74fGk-lVDaWuJWdeQL9jHoIM_Vs8ffp4DzIU9GvjIQu9nz7e_9wJy7yxIENzuJEPQr3AJwG1EDX0BvId062ATEPmXL_vvDR6PtDYbL5-hndfoBWdNXDFnIB4cBFkaPgftaIlSJB7kp7v5p5VSkBAb2Fn5WMg2GvN9qLesrq2kBvtPNMegvRDAp-hpGFCw5WkBGJAVqELkjQ_NLM0L-nhAmdFQhEqQXobupiSrYbJwLYWjdQCPhpZQ5AgpvnO2G3Tax4kAVIAUkJAKIIg_wDQUmhvXwY5EAKSDgK2nbeRfiu8UGIvtA89Ulem17W75B04TDqWcOLFgTo6NS4HfGQqDqgMqyPM8FyEOmcVXrPCR4FBcX57PhF_OGPk9RmbuFUptvtTiwBJWQjW7_CHwmfYKMP8yaHLrujRGB7biBo1Z8loUmygKH8Y88KiAYesDo2z577TpVVME84z_nB-s60rgJa_hG5Y9_tuEI7mMP67t6a1bA-ZbfugOiQRCMh6Z_YCkPUDk15J3QndHnJI1UtVz-ISDnlE6niD__lLp8QzphEvXLhamVp8EvoikTRSMyV_F1sl9QNrxVwpOJs1Ugn_0glAb5nbw5mBM4CWeJTxpdda6hZ2zDkISB6SEYxpCI45SVhAcmg03Ju6D2uZ5G_JGJA8ppsQdegZIYTSlKOU5SlFHMOISZeALt2LGxr3Vmofp-lXy7gApDg9ZNnT1jhvBdsDksVo0n6I6mskDLn7l77rjA3d_9HyOXTIVjPl5lJzQJcFTQBdYjywx1P2WVLBCdXh_Z-YrlVwuYhBSpZvxK_EReA30CMTepiW2Wvmfun1BUt3zAr_D78DsbDR0SVGwbh0IEanvtW8hlOj4iSuoJOt1I3Z-mjaCr6tfwnJAF3SYuCZjDzzJkmyHCWChjQZzBnRnotsmyUzJXX_PGt1P9zgc2fmGSAf0HOSUooAKQe89BKP5RXhsPM7K1i9fZBKXQdeiorwI3g2JUtyAS2TTlxLmeTiiJpfolJcNA1klbH-OlRSFE1zRC2-QcXV1Xih8Brxyon2JMX5dXi0SnF-xMMXeSmv66SkBawFVzHLkoL13oQQPK0mzpwHdHXqOC_DyOrsya9M9QLQjxdJbOj8kbiWmqu-FqeOU4ivmPNSt_NdWHp5GZfhKBBPBCJWsOAY00a_7E3vYKjgXBeTbTlw_KaI_SqdDPLi3cdw8Un4j0OFcO_tnQ6bwpnIV-5mP7qQv7vIpstQY9PlcW7JpXQuRFmfTU_gdRS2-lFLyApWxqgwzX_gzhs4800o3H0JP9p528eKeF6LJkRBnpx2CUynfiQNeR8_Liw4o_mO4pOJ-Dqn6d-wDi6UrY_fI-8S7Vkeov0gMJ0KRLiEzfl7F1w_xwLwfZgmWUxJh3WZTVISRZHCdVOxES3jL2Nh2Ouf9UHQP6WxCLmHjhLzc4llTjEpq7-S-Pn-njn3mWnWCvvGwuKSGSw8G_RQwqWYhsg6iCkmYpDA7CxvqLOZOAO723fqqOId2acUBw3ZSL6ckE8zhv-a_D9BHGcJOoUQuaxMKpTykkFu9p1U4hgSfMdsLCaWl6XHZvP188poL55_bIPxxig3fNIOvyPHPAvmjguZ4AlFWucY7pnUf9NoSfyWwAdHyKSYpJizK4tJhjk7Fn-ETgFJUcHtNryzdZ5Zvx3FXDUEKU71KkmmFqUkhQP4iHv1GcNQxiaoTEk6DLSWSqx2gj9AYW3cnuKHPV05X0sdK9AcSgfFvvMv84sXuNnvma4Ph6jXH3qcoN746IOHQWadFY18Fg7Q29VPH1f_mm02q_Nznpt6QeuSluxGLHCekqzMCc5udgua8wKXPG8IyWhd1EQgTgmjTcqyKinzG7kgiKQoxxlBBOFsjitOeJaleZWlOa0YSJDYM6nmQcHc2PZGOteLBU5KnJc3ilVCufFQu2L8Qeg6bFwHWfFw2y5GI1sHEqSk8-4E56VX8VT88E56C4fjLKnhq_tOuPF6OX7TW7W4-jw8CgorcdT0uCD_CwAA__9k7UpJ">