[llvm] [DirectX] Do not flatten GEP chains for unsupported types (PR #150484)

via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 24 11:12:54 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-directx

Author: Deric C. (Icohedron)

<details>
<summary>Changes</summary>

Fixes #<!-- -->150463 by not processing GEPs for unsupported types such as structs in the DXILFlattenArrays pass.

---
Full diff: https://github.com/llvm/llvm-project/pull/150484.diff


1 Files Affected:

- (modified) llvm/lib/Target/DirectX/DXILFlattenArrays.cpp (+7-2) 


``````````diff
diff --git a/llvm/lib/Target/DirectX/DXILFlattenArrays.cpp b/llvm/lib/Target/DirectX/DXILFlattenArrays.cpp
index f0e2e786dfaf4..b7f81c4b3e357 100644
--- a/llvm/lib/Target/DirectX/DXILFlattenArrays.cpp
+++ b/llvm/lib/Target/DirectX/DXILFlattenArrays.cpp
@@ -263,8 +263,13 @@ bool DXILFlattenArraysVisitor::visitGetElementPtrInst(GetElementPtrInst &GEP) {
   // merge the byte offsets. Otherwise, this GEP is itself the root of a GEP
   // chain and we need to deterine the root array type
   if (auto *PtrOpGEP = dyn_cast<GEPOperator>(PtrOperand)) {
-    assert(GEPChainInfoMap.contains(PtrOpGEP) &&
-           "Expected parent GEP to be visited before this GEP");
+
+    // If the parent GEP was not processed, then we do not want to process its
+    // descendants. This can happen if the GEP chain is for an unsupported type
+    // such as structs -- we do not flatten structs.
+    if (!GEPChainInfoMap.contains(PtrOpGEP))
+      return false;
+
     GEPInfo &PGEPInfo = GEPChainInfoMap[PtrOpGEP];
     Info.RootFlattenedArrayType = PGEPInfo.RootFlattenedArrayType;
     Info.RootPointerOperand = PGEPInfo.RootPointerOperand;

``````````

</details>


https://github.com/llvm/llvm-project/pull/150484


More information about the llvm-commits mailing list