[llvm] [AMDGPU] Add DSE pass during CodeGenPrepare (PR #172069)

Gang Chen via llvm-commits llvm-commits at lists.llvm.org
Sat Dec 13 16:38:09 PST 2025


https://github.com/cmc-rep updated https://github.com/llvm/llvm-project/pull/172069

>From f196ee02a8c293903260711360435537d3834a01 Mon Sep 17 00:00:00 2001
From: Gang Chen <Gang.Chen at amd.com>
Date: Fri, 12 Dec 2025 11:00:52 -0800
Subject: [PATCH] [AMDGPU] Add an optional DSE pass during CodeGenPrepare

By default, this option is off for now.
---
 llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
index 8a831f7915882..e50d80914db8a 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
@@ -104,6 +104,7 @@
 #include "llvm/Transforms/IPO/GlobalDCE.h"
 #include "llvm/Transforms/IPO/Internalize.h"
 #include "llvm/Transforms/Scalar.h"
+#include "llvm/Transforms/Scalar/DeadStoreElimination.h"
 #include "llvm/Transforms/Scalar/EarlyCSE.h"
 #include "llvm/Transforms/Scalar/FlattenCFG.h"
 #include "llvm/Transforms/Scalar/GVN.h"
@@ -355,6 +356,13 @@ static cl::opt<bool> EnableLoadStoreVectorizer(
   cl::init(true),
   cl::Hidden);
 
+// Option to enable DSE in backend.
+static cl::opt<bool> EnableDeadStoreElimination(
+  "amdgpu-dead-store-elimination",
+  cl::desc("Enable dead store elimination"),
+  cl::init(false),
+  cl::Hidden);
+
 // Option to control global loads scalarization
 static cl::opt<bool> ScalarizeGlobal(
   "amdgpu-scalarize-global-loads",
@@ -1413,6 +1421,10 @@ void AMDGPUPassConfig::addCodeGenPrepare() {
     addPass(createAMDGPULowerKernelArgumentsPass());
 
   TargetPassConfig::addCodeGenPrepare();
+  // TODO: Remove DSE when LoadStoreVectorizer is enhanced to handle
+  // partially overlapping vector-stores.
+  if (isPassEnabled(EnableDeadStoreElimination))
+    addPass(createDeadStoreEliminationPass());
 
   if (isPassEnabled(EnableLoadStoreVectorizer))
     addPass(createLoadStoreVectorizerPass());
@@ -2183,6 +2195,10 @@ void AMDGPUCodeGenPassBuilder::addCodeGenPrepare(AddIRPass &addPass) const {
     addPass(AMDGPULowerKernelArgumentsPass(TM));
 
   Base::addCodeGenPrepare(addPass);
+  // TODO: Remove DSE when LoadStoreVectorizer is enhanced to handle
+  // partially overlapping vector-stores.
+  if (isPassEnabled(EnableDeadStoreElimination))
+    addPass(DSEPass());
 
   if (isPassEnabled(EnableLoadStoreVectorizer))
     addPass(LoadStoreVectorizerPass());



More information about the llvm-commits mailing list