<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/150050>150050</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[DirectX] DXILDataScalarization.cpp is leaving LLVM IR in a broken state where globals are deleted when they still have const uses.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:DirectX
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
farzonl
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
farzonl
</td>
</tr>
</table>
<pre>
This bug is a result of `DXILDataScalarization.cpp` not consider that geps could be const expressions of other geps. That means we do not walk const Expression GEPs so we never replace the global with its newly scalarized form
```hlsl
groupshared uint4 aTile[10][10];
[numthreads(1, 1, 1)]
void CSMain() {
uint4 aFragPacked = aTile[1][2];
}
```
```llvm
; ModuleID = '../crash.hlsl'
source_filename = "../crash.hlsl"
target datalayout = "e-m:e-p:32:32-i1:32-i8:8-i16:16-i32:32-i64:64-f16:16-f32:32-f64:64-n8:16:32:64"
target triple = "dxilv1.4-pc-shadermodel6.4-compute"
@aTile = hidden addrspace(3) global [10 x [10 x <4 x i32>]] zeroinitializer, align 16
; Function Attrs: convergent noinline norecurse optnone
define void @CSMain() #0 {
entry:
%aFragPacked.i = alloca <4 x i32>, align 16
%0 = load <4 x i32>, ptr addrspace(3) getelementptr inbounds ([10 x <4 x i32>], ptr addrspace(3) getelementptr inbounds ([10 x [10 x <4 x i32>]], ptr addrspace(3) @aTile, i32 0, i32 1), i32 0, i32 2), align 16
store <4 x i32> %0, ptr %aFragPacked.i, align 16
ret void
}
attributes #0 = { convergent noinline norecurse optnone "approx-func-fp-math"="true" "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" "no-infs-fp-math"="true" "no-nans-fp-math"="true" "no-signed-zeros-fp-math"="true" "no-trapping-math"="true" "stack-protector-buffer-size"="8" }
!llvm.module.flags = !{!0, !1}
!dx.valver = !{!2}
!llvm.ident = !{!3}
!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 1, !"dx.nativelowprec", i32 1}
!2 = !{i32 1, i32 8}
!3 = !{!"clang version 21.0.0git (https://github.com/llvm/llvm-project.git 3d6aac31fcb5f7a988be5e484e44bdc9033265c5)"}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJykVluP2zoO_jXKC2FDli9xHvLgaZpFgRYotsWib4Vs0bZ2FMmQ5Mzl1y-ksZPJtLM9BwdwIsP8eBH5USJ3Tg4acU_KO8JYz-2z0YowRsrDhs9-NHa_fNy0Rjztv4_SQTsPIB1wsOhm5cH0AKSihx-fPh-45986rriVz9xLo9NumkhFQRsPndFOCrTgR-5hwMlBZ2YloMUo84CPk0XnpNEuWDV-RBuBKXwPOifk2sEDgjDR4gNX94vqx4sq_OvjVwfOBJzGM1qwOCneIfgRYVCm5QoepB9BegcaH9QTuCVmFNAbeyK0CU9FX55ROUVoM1gzT27kFgXMUvsC-HepkJR3GSXl4bLmd4t-eafnkx8tcuEIqzPCPsD6twtI2pyNFPDh2xcuNWE1YTsg26AOAKuPo-XDV97dowCSH64-X1yyq8ft4XXQb_ag1DluK7-DL0bMCj8dojnCtmlK2LGz3I1p3CnbEto4M9sOf_ZSoeYnXLDsFywjtPHcDuhBcM8VfzKzX9GYnEjeYDKRvMlZ_Etktqw1yZs6kVlF8iarEnkBVAXJm6pI-lXUr6J-Fek6SlazVXETiLdyUpeQxaNU5ywtkqlL3MgF2pMRqKq0SDpzmmaPL8rhKWhMb1QdpRCogQth3cQ7JKzOQ4EWBsVyw-N1zT8U8AhxGx9jbQ7wjNZILb3kSj6jDaXnSg4asmpxmN_BcdZdaBVovLeO5E1g9BntgNqDNlIrqRG0sdjN1iGYyWujkdBGYB9EkUOkoLc0YjlduITa2yeSN5FWhJWvGJXKF04pZTr-Zgu3wUZNGtHKcPErdvL2N7lCjwpPqH0QS92aWQsHIcb30vYPTL1fiXetrhUPAJkzoOtLbNG3H9ny8SYvzhuLt05jrlafbzP-iwGLPtbw2sO04d5b2c4e3VLJwOXt3V-jRmA9nyZrHpN-1l3ST8mJ-zHQPD8QxrydA-cDLDRx-vqUWiDhmFp-V9xL91ww1-4JCG0SqXv3_5xpk2iu_wSJV5JIQu_8Ceotnyaph3cxzvPuPpms8dh5Y5N27nu0iZPPeIHXEbsmnrAsHJXpKR6Saa_44JaTJAvtxLJYWMKybNFhmXhMz1yFm-YGyC6AaFGKULUbRP7aLX0lWxgY_RDGHrqR259r1AsZi4v57H1N8Zhq7uUZlXmYLHav9K_xs9_ph5f6AslvAw_VV1wPcEYb71yWpTSlg_ShIUfvp3CQEXYk7DhIP85t2pkTYcd4Db0soSz_xc6nQSsXFeddnvVdW_ZbvqvrFkss6gKLohXdjuY5q8qujA3Irmlbr7eN2Odil-_4BvfZtswZpTtWb8Z9u83KrK16rJnoql60dV8jq7Ki5ALbXmzknlFW0i1jWZWVrE5ZndPdlrFWFF1b0x0pKJ64VGmsorHDRjo34z4rKS3pRvEWlVsmqDb0uBYkbw7SYud_LLOU3ccdt_PgSEGVdN5dzXnpVRzBVp3yAO8OU2HyUsjPUg_w-fN_vsCnf4PUwKG15h41OM89wsOIdp11HHCLIFChRxEkOgxCT-C8VApGfl6nr9mhSzezVfu_V0DCjjEjjrDjkpTznv0vAAD__7L-DNA">