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

    <tr>
        <th>Summary</th>
        <td>
            lld hangs targeting amdgpu and so does opt using amdgpu-attributor pass
        </td>
    </tr>

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

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

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

<pre>
    The following hangs for me, `opt --amdgpu-attributor hang.ll -o foo.bc` where hang.ll is
```
; ModuleID = 'reduced.ll'
source_filename = "reduced.ll"
target datalayout = "e-p:64:64-p1:64:64-p2:32:32-p3:32:32-p4:64:64-p5:32:32-p6:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64-S32-A5-G1-ni:7"
target triple = "amdgcn-amd-amdhsa"

%0 = type { %1, i32, i32, i32, %2, i32, [4 x i8], %3, i32, i32, double, i8, i8, %4, [3 x [3 x double]], %5*, %22* }
%1 = type { i32 (...)** }
%2 = type { %1, double, double, double, double, double, double, double, double }
%3 = type <{ i8*, i64, i64, i32, [4 x i8] }>
%4 = type { double, double, double }
%5 = type { %3, i8, i32, %6, %7, i32, i32, i32, i32, double, i8, i8, i8, %4, [3 x [3 x double]], double, double, double, i32, [4 x i8], %3, i32, i32, i8, i32, %8, i32, %0*, %3, i8*, double (double, double, double, double, double, double, double, double, double)*, %10* }
%6 = type { i32, double, double, double }
%7 = type { i32, double* }
%8 = type { %1, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, %3, %3, %3, %3, %3, %3, %3, %3, %3, %3, %3, %3, %3, %3, %3, %3, %3, %3, %3, %3, %3, %3, %3, %3, %3, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9 }
%9 = type <{ double*, i64, i64, i32, [4 x i8] }>
%10 = type { i64, %11* }
%11 = type { %12, i8*, i64, i64, void (%10*)*, i64, %10* (%10*, i8*)*, i32 (%10*, i8*, %10*)*, %13*, %10* (%10*)*, %14*, %15*, %16*, i64 (%10*)*, %10* (%10*, %10*, %10*)*, %10* (%10*)*, %10* (%10*, %10*)*, i32 (%10*, %10*, %10*)*, %17*, i64, i8*, i32 (%10*, i32 (%10*, i8*)*, i8*)*, i32 (%10*)*, %10* (%10*, %10*, i32)*, i64, %10* (%10*)*, %10* (%10*)*, %19*, %20*, %21*, %11*, %10*, %10* (%10*, %10*, %10*)*, i32 (%10*, %10*, %10*)*, i64, i32 (%10*, %10*, %10*)*, %10* (%11*, i64)*, %10* (%11*, %10*, %10*)*, void (i8*)*, i32 (%10*)*, %10*, %10*, %10*, %10*, %10*, void (%10*)*, i32, void (%10*)*, %10* (%10*, %10**, i64, %10*)* }
%12 = type { %10, i64 }
%13 = type { %10* (%10*)*, %10* (%10*)*, %10* (%10*)* }
%14 = type { %10* (%10*, %10*)*, %10* (%10*, %10*)*, %10* (%10*, %10*)*, %10* (%10*, %10*)*, %10* (%10*, %10*)*, %10* (%10*, %10*, %10*)*, %10* (%10*)*, %10* (%10*)*, %10* (%10*)*, i32 (%10*)*, %10* (%10*)*, %10* (%10*, %10*)*, %10* (%10*, %10*)*, %10* (%10*, %10*)*, %10* (%10*, %10*)*, %10* (%10*, %10*)*, %10* (%10*)*, i8*, %10* (%10*)*, %10* (%10*, %10*)*, %10* (%10*, %10*)*, %10* (%10*, %10*)*, %10* (%10*, %10*)*, %10* (%10*, %10*, %10*)*, %10* (%10*, %10*)*, %10* (%10*, %10*)*, %10* (%10*, %10*)*, %10* (%10*, %10*)*, %10* (%10*, %10*)*, %10* (%10*, %10*)*, %10* (%10*, %10*)*, %10* (%10*, %10*)*, %10* (%10*, %10*)*, %10* (%10*)*, %10* (%10*, %10*)*, %10* (%10*, %10*)* }
%15 = type { i64 (%10*)*, %10* (%10*, %10*)*, %10* (%10*, i64)*, %10* (%10*, i64)*, i8*, i32 (%10*, i64, %10*)*, i8*, i32 (%10*, %10*)*, %10* (%10*, %10*)*, %10* (%10*, i64)* }
%16 = type { i64 (%10*)*, %10* (%10*, %10*)*, i32 (%10*, %10*, %10*)* }
%17 = type { i32 (%10*, %18*, i32)*, void (%10*, %18*)* }
%18 = type { i8*, %10*, i64, i64, i32, i32, i8*, i64*, i64*, i64*, i8* }
%19 = type { i8*, %10* (%10*, %10*)*, i32, i8* }
%20 = type { i8*, i32, i64, i32, i8* }
%21 = type { i8*, %10* (%10*, i8*)*, i32 (%10*, %10*, i8*)*, i8*, i8* }
%22 = type { %3, i32, %23, %24, i32, i32, %3 }
%23 = type { i32, i64, i64, i64 }
%24 = type { i64, i64* }

define internal fastcc i1 @widget(%0* %arg) {
bb:
  %tmp = getelementptr inbounds %0, %0* %arg, i64 0, i32 15
  %tmp1 = load %5*, %5** %tmp, align 8
  %tmp2 = call fastcc double @baz(%5* %tmp1)
  ret i1 false
}

define internal fastcc double @baz(%5* %arg) {
bb:
  %tmp = getelementptr inbounds %5, %5* %arg, i64 0, i32 30
  %tmp1 = load double (double, double, double, double, double, double, double, double, double)*, double (double, double, double, double, double, double, double, double, double)** %tmp, align 8
  %tmp2 = tail call double %tmp1(double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00, double 0.000000e+00)
  br label %bb3

bb3:                                              ; preds = %bb
  %tmp4 = getelementptr inbounds %5, %5* %arg, i64 0, i32 27
  br label %bb5

bb5:                                              ; preds = %bb5, %bb3
  %tmp6 = load %0*, %0** %tmp4, align 8
  %tmp7 = call fastcc i1 @widget(%0* %tmp6)
  br label %bb5
}

```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztWVuPozYU_jXkBREZGxN4yENm0l31YaVKbZ8rA07C1gHEJdPdX99jbjHXhJnsqNN2lME2_nwu3zk2GHtx8G3724nrh1iI-CWMjvqJRccM2ql-5hp-1jUbxUmuGwY7B8ekMFiep6FX5ACQ0LUQuhEDPl57PmD1lxNPedsVZhraa2gHPfWvapIn_UscFIL_vNc1Av94k_Kg8HkAo6BRwbK4SH3-xyEUPGJnXiOxisQVMmfpked6wHIm2Le4yBssNxKN7GyrvBiJqTYwlKS6GAlRG5YKo2qPrTTCBnIx5W3TNi7YqrouDeZiOTXGLTHYAbQrOzGVeGo3VWrKu3AFACrlyAIgqBQhCyMqxYK0X0H0jhqfTSMK4c6mTwTEKBEtYTJ0fiQjKP9PGWvh9RVTVGLzbwkM2jzBIGrK6IegcFBAZ6dJnyz9Lz10NLqvu8lwUBAXnigzCoDtFbBWLYOAjLqosSCulUg1vGt0g7wdWLlvjTe7xoNGwDnr9VrDbjmuC8fjvl4tfHuto48o-shzaaFTuyNTSCmGhJaCyE-tLKtr-50W0IHHRIlEG1W7LjeToZ8N5pKQzpO4KLP6XvSa6Jo5rdM7lSfsPDLyas29qjZRPwvtQdIuSKnN7OCuImfB1F5cNKz-C0r3UWWHfXcw-dsovWoBMHsrdT1S9piDddEchr6dMiPqL3EYyPnQ5Os1gxUtVSKroFZei64W4BHEVUR3dpDBTBmzQt6xlLryUIAncGvp9OAx28fr86PulzlDyW3Fm16UnBl-Jyl3J5r9AUt4KvP0rty4n0eljhWd2FQw5gx1y-hdHI_rDH1bApmqvFugedHNdF0a2dfUZ5aGas2aBtwO0FgaVeO7y9nIixtq57wKJKPAV6fmeG9XpXWPyvtXmI-IfNT6eV_vwgXso5D4KGRv2f_v0PLPseR_5HtnXXdJpoM35R9lxezDfBQ0-y439iS8NeiHutXltb9zfTuvi96qusYMd8JjkhTihu9P4-Chqt5GemRLM7GfUz5UXEHTNWeg2b2h-S6Gx2Xj_n7S6Y3oejIc3__4dsu223vFObQzSRIevh2qH4skotnp45HgaOV3OlUeGf3G0gtw780TW6O78yq4CrK8BvwQRlwPo5ynERP6gWW57-shMGqhlzA48rxipqaRsvQIVEjBlQDP00gtS5f9-Tkp1cNALviZR3mSpyDfi4soyPRK0rPel1i5gZpowLa6I7IKsIiZnCzqh9iquqth8iYT4THSne74Ki4-E62HzQctC3nse-UivQoyZbhrCSnPJR8HJjJeU3cXhzMa3k4iVfyfIpGgSRLf77vje2m6MwVyFooqD1rD6njX9ulojco_kPyEkOLCB-9o89lLdcE8LqTrnkfUTJZNApAlf_IcLUm5TMvypAdkdom3HpDKzWlc33ratZ4-wvrGnpabxhG7swgpTwrUyUBrMgU3g1Voep2V-iaDRkfXofaAc8W3pm3bDkYb21wFWxK4xGWrPMwF3woR1Aes1TmdPHCtzlV1FgV6FkMC8UyXB65Fdu1UD10TlmWrIhXbU54nmVy68Cf4HcP8VHhrPz5DQ4hLUxhJGn_lPjj4KcyygmdQoY5N3NVp67uHDaFgHfcOzDHdzYG7wYGTAGGTuL63Kr3Othp90jD2mP8njwLQuPuy__zL7_IMke5X4RYjjE2EbWxaNjLX1D8Qz_VJwF10QJwCx_wMM38tzVnH6XGVbkvLvOKYQacIszy7doJ7ED3OS60gnxX5KU63Sfy9EMmq9GFbOvA3IOMOVw">