[llvm] [DirectX] Do not flatten GEP chains for unsupported types (PR #150484)
Deric C. via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 24 11:12:34 PDT 2025
https://github.com/Icohedron created https://github.com/llvm/llvm-project/pull/150484
Fixes #150463 by not processing GEPs for unsupported types such as structs in the DXILFlattenArrays pass.
>From 9ec8fc4bc8840d646eeba0fbdc1390bf2fd0b2b6 Mon Sep 17 00:00:00 2001
From: Deric Cheung <dericcheung at microsoft.com>
Date: Thu, 24 Jul 2025 18:10:02 +0000
Subject: [PATCH] Do not flatten GEP chains for unsupported types
---
llvm/lib/Target/DirectX/DXILFlattenArrays.cpp | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
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;
More information about the llvm-commits
mailing list