[llvm] c6c13d4 - [DirectX backend] When cleanup module flags only remove unused flags.
via llvm-commits
llvm-commits at lists.llvm.org
Thu May 19 14:50:16 PDT 2022
Author: python3kgae
Date: 2022-05-19T14:50:11-07:00
New Revision: c6c13d4e5fcacd2fc2f32fcecaaf816ccc20c9e5
URL: https://github.com/llvm/llvm-project/commit/c6c13d4e5fcacd2fc2f32fcecaaf816ccc20c9e5
DIFF: https://github.com/llvm/llvm-project/commit/c6c13d4e5fcacd2fc2f32fcecaaf816ccc20c9e5.diff
LOG: [DirectX backend] When cleanup module flags only remove unused flags.
Only remove dx.valver from module flags when cleanup module flags in DXILTranslateMetadataPass.
Reviewed By: beanz
Differential Revision: https://reviews.llvm.org/D125842
Added:
Modified:
llvm/lib/Target/DirectX/DXILTranslateMetadata.cpp
llvm/test/CodeGen/DirectX/dxil_ver.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/DirectX/DXILTranslateMetadata.cpp b/llvm/lib/Target/DirectX/DXILTranslateMetadata.cpp
index 1dbe424058a66..e587dd53c62ad 100644
--- a/llvm/lib/Target/DirectX/DXILTranslateMetadata.cpp
+++ b/llvm/lib/Target/DirectX/DXILTranslateMetadata.cpp
@@ -9,8 +9,10 @@
//===----------------------------------------------------------------------===//
#include "DirectX.h"
+#include "llvm/ADT/StringSet.h"
#include "llvm/ADT/Triple.h"
#include "llvm/IR/Constants.h"
+#include "llvm/IR/Metadata.h"
#include "llvm/IR/Module.h"
#include "llvm/Pass.h"
@@ -56,10 +58,32 @@ static VersionTuple loadDXILValidatorVersion(MDNode *ValVerMD) {
return VersionTuple(Major, Minor);
}
-static void cleanModule(Module &M) {
- M.getOrInsertModuleFlagsMetadata()->eraseFromParent();
+static void cleanModuleFlags(Module &M) {
+ constexpr StringLiteral DeadKeys[] = {ValVerKey};
+ // Collect DeadKeys in ModuleFlags.
+ StringSet<> DeadKeySet;
+ for (auto &Key : DeadKeys) {
+ if (M.getModuleFlag(Key))
+ DeadKeySet.insert(Key);
+ }
+ if (DeadKeySet.empty())
+ return;
+
+ SmallVector<Module::ModuleFlagEntry, 8> ModuleFlags;
+ M.getModuleFlagsMetadata(ModuleFlags);
+ NamedMDNode *MDFlags = M.getModuleFlagsMetadata();
+ MDFlags->eraseFromParent();
+ // Add ModuleFlag which not dead.
+ for (auto &Flag : ModuleFlags) {
+ StringRef Key = Flag.Key->getString();
+ if (DeadKeySet.contains(Key))
+ continue;
+ M.addModuleFlag(Flag.Behavior, Key, Flag.Val);
+ }
}
+static void cleanModule(Module &M) { cleanModuleFlags(M); }
+
namespace {
class DXILTranslateMetadata : public ModulePass {
public:
diff --git a/llvm/test/CodeGen/DirectX/dxil_ver.ll b/llvm/test/CodeGen/DirectX/dxil_ver.ll
index 3c851ad95ffd8..dcc9b6a797f6a 100644
--- a/llvm/test/CodeGen/DirectX/dxil_ver.ll
+++ b/llvm/test/CodeGen/DirectX/dxil_ver.ll
@@ -2,8 +2,14 @@
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 = "dxil-pc-shadermodel6.3-library"
+; Make sure dx.valver metadata is generated.
; CHECK:!dx.valver = !{![[valver:[0-9]+]]}
+; Make sure module flags still exist and only have 1 operand left.
+; CHECK:!llvm.module.flags = !{{{![0-9]}}}
+; Make sure validator version is 1.1.
; CHECK:![[valver]] = !{i32 1, i32 1}
+; Make sure wchar_size still exist.
+; CHECK:!{i32 1, !"wchar_size", i32 4}
!llvm.module.flags = !{!0, !1}
!llvm.ident = !{!3}
More information about the llvm-commits
mailing list