[llvm-branch-commits] [clang] [llvm] [DirectX] Making sure SROA is run when targeting DirectX (PR #179600)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Feb 5 15:50:22 PST 2026
https://github.com/joaosaffran updated https://github.com/llvm/llvm-project/pull/179600
>From 120e4db1dd9903e9191e1134d893144eab41f8e8 Mon Sep 17 00:00:00 2001
From: Joao Saffran <jderezende at microsoft.com>
Date: Tue, 3 Feb 2026 19:03:50 -0800
Subject: [PATCH 1/2] add SROA, remove optnone and add test
---
.../intermediate-stores-removed-when-O0.hlsl | 16 ++++++++++++++++
llvm/lib/Target/DirectX/DirectXTargetMachine.cpp | 4 +++-
2 files changed, 19 insertions(+), 1 deletion(-)
create mode 100644 clang/test/CodeGenHLSL/intermediate-stores-removed-when-O0.hlsl
diff --git a/clang/test/CodeGenHLSL/intermediate-stores-removed-when-O0.hlsl b/clang/test/CodeGenHLSL/intermediate-stores-removed-when-O0.hlsl
new file mode 100644
index 0000000000000..79cfa31228f75
--- /dev/null
+++ b/clang/test/CodeGenHLSL/intermediate-stores-removed-when-O0.hlsl
@@ -0,0 +1,16 @@
+// RUN: not %clang_cc1 -triple dxilv1.7-unknown-shadermodel6.7-compute -O0 -S -hlsl-entry main -finclude-default-header -o - -x hlsl %s 2>&1
+
+
+// Issue caused by issue https://github.com/llvm/llvm-project/issues/168604
+// CHECK: error: Unsupported intrinsic llvm.experimental.noalias.scope.decl for DXIL lowering
+
+// CHECK-NOT: Load of {{.*}} is not a global resource handle
+
+RWBuffer<int> In : register(u0);
+RWBuffer<int> Out : register(u1);
+
+[numthreads(1,1,1)]
+void main(uint GI : SV_GroupIndex) {
+ Out[GI] = In[GI];
+}
+
diff --git a/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp b/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp
index c0a92f92e1fba..67a28ada3c736 100644
--- a/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp
+++ b/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp
@@ -70,6 +70,7 @@ LLVMInitializeDirectXTarget() {
initializeDXContainerGlobalsPass(*PR);
initializeGlobalDCELegacyPassPass(*PR);
initializeDXILOpLoweringLegacyPass(*PR);
+ initializeSROALegacyPassPass(*PR);
initializeDXILResourceAccessLegacyPass(*PR);
initializeDXILResourceImplicitBindingLegacyPass(*PR);
initializeDXILTranslateMetadataLegacyPass(*PR);
@@ -121,6 +122,7 @@ class DirectXPassConfig : public TargetPassConfig {
DxilScalarOptions.ScalarizeLoadStore = true;
addPass(createScalarizerPass(DxilScalarOptions));
addPass(createDXILFlattenArraysLegacyPass());
+ addPass(createSROAPass());
addPass(createDXILForwardHandleAccessesLegacyPass());
addPass(createDeadStoreEliminationPass());
addPass(createDXILLegalizeLegacyPass());
@@ -147,7 +149,7 @@ DirectXTargetMachine::DirectXTargetMachine(const Target &T, const Triple &TT,
DirectXTargetMachine::~DirectXTargetMachine() {}
-void DirectXTargetMachine::registerPassBuilderCallbacks(PassBuilder &PB) {
+void DirectXTargetMachine::registerPassBuilderCallbacks(PassBuilder &PB){
#define GET_PASS_REGISTRY "DirectXPassRegistry.def"
#include "llvm/Passes/TargetPassRegistry.inc"
}
>From a2196c2fe0048d5827de0652e558ace479fc3022 Mon Sep 17 00:00:00 2001
From: Joao Saffran <joaosaffranllvm at gmail.com>
Date: Thu, 5 Feb 2026 10:45:38 -0800
Subject: [PATCH 2/2] fix llc-pipeline.ll test
---
llvm/test/CodeGen/DirectX/llc-pipeline.ll | 1 +
1 file changed, 1 insertion(+)
diff --git a/llvm/test/CodeGen/DirectX/llc-pipeline.ll b/llvm/test/CodeGen/DirectX/llc-pipeline.ll
index 0af783a778812..a4a3f8f56b530 100644
--- a/llvm/test/CodeGen/DirectX/llc-pipeline.ll
+++ b/llvm/test/CodeGen/DirectX/llc-pipeline.ll
@@ -28,6 +28,7 @@
; CHECK-NEXT: DXIL Array Flattener
; CHECK-NEXT: FunctionPass Manager
; CHECK-NEXT: Dominator Tree Construction
+; CHECK-NEXT: SROA
; CHECK-NEXT: DXIL Forward Handle Accesses
; CHECK-NEXT: Dominator Tree Construction
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
More information about the llvm-branch-commits
mailing list