[llvm-branch-commits] [llvm] [DirectX][NFC] Delay converting to old-style debug info (PR #201336)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed Jun 3 05:10:35 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-directx
Author: Harald van Dijk (hvdijk)
<details>
<summary>Changes</summary>
This is NFC at the moment, but upcoming work relies on debug info still using new-style debug records after DXILPrepare.
---
Full diff: https://github.com/llvm/llvm-project/pull/201336.diff
3 Files Affected:
- (modified) llvm/lib/Target/DirectX/DXILPrepare.cpp (+65-56)
- (modified) llvm/lib/Target/DirectX/DirectX.h (+4)
- (modified) llvm/lib/Target/DirectX/DirectXIRPasses/DXILDebugInfo.cpp (+10)
``````````diff
diff --git a/llvm/lib/Target/DirectX/DXILPrepare.cpp b/llvm/lib/Target/DirectX/DXILPrepare.cpp
index 81f4d3da48362..7aafc926a5c5a 100644
--- a/llvm/lib/Target/DirectX/DXILPrepare.cpp
+++ b/llvm/lib/Target/DirectX/DXILPrepare.cpp
@@ -33,55 +33,71 @@
using namespace llvm;
using namespace llvm::dxil;
-namespace {
-
-constexpr bool isValidForDXIL(Attribute::AttrKind Attr) {
- return is_contained({Attribute::Alignment,
- Attribute::AlwaysInline,
- Attribute::Builtin,
- Attribute::ByVal,
- Attribute::InAlloca,
- Attribute::Cold,
- Attribute::Convergent,
- Attribute::InlineHint,
- Attribute::InReg,
- Attribute::JumpTable,
- Attribute::MinSize,
- Attribute::Naked,
- Attribute::Nest,
- Attribute::NoAlias,
- Attribute::NoBuiltin,
- Attribute::NoDuplicate,
- Attribute::NoImplicitFloat,
- Attribute::NoInline,
- Attribute::NonLazyBind,
- Attribute::NonNull,
- Attribute::Dereferenceable,
- Attribute::DereferenceableOrNull,
- Attribute::Memory,
- Attribute::NoRedZone,
- Attribute::NoReturn,
- Attribute::NoUnwind,
- Attribute::OptimizeForSize,
- Attribute::OptimizeNone,
- Attribute::ReadNone,
- Attribute::ReadOnly,
- Attribute::Returned,
- Attribute::ReturnsTwice,
- Attribute::SExt,
- Attribute::StackAlignment,
- Attribute::StackProtect,
- Attribute::StackProtectReq,
- Attribute::StackProtectStrong,
- Attribute::SafeStack,
- Attribute::StructRet,
- Attribute::SanitizeAddress,
- Attribute::SanitizeThread,
- Attribute::SanitizeMemory,
- Attribute::UWTable,
- Attribute::ZExt},
- Attr);
+namespace llvm {
+namespace dxil {
+const AttributeMask &getNonDXILAttributeMask() {
+ static const AttributeMask Result = [] {
+ AttributeMask DXILAttributeMask;
+ for (Attribute::AttrKind Kind : {Attribute::Alignment,
+ Attribute::AlwaysInline,
+ Attribute::Builtin,
+ Attribute::ByVal,
+ Attribute::InAlloca,
+ Attribute::Cold,
+ Attribute::Convergent,
+ Attribute::InlineHint,
+ Attribute::InReg,
+ Attribute::JumpTable,
+ Attribute::MinSize,
+ Attribute::Naked,
+ Attribute::Nest,
+ Attribute::NoAlias,
+ Attribute::NoBuiltin,
+ Attribute::NoDuplicate,
+ Attribute::NoImplicitFloat,
+ Attribute::NoInline,
+ Attribute::NonLazyBind,
+ Attribute::NonNull,
+ Attribute::Dereferenceable,
+ Attribute::DereferenceableOrNull,
+ Attribute::Memory,
+ Attribute::NoRedZone,
+ Attribute::NoReturn,
+ Attribute::NoUnwind,
+ Attribute::OptimizeForSize,
+ Attribute::OptimizeNone,
+ Attribute::ReadNone,
+ Attribute::ReadOnly,
+ Attribute::Returned,
+ Attribute::ReturnsTwice,
+ Attribute::SExt,
+ Attribute::StackAlignment,
+ Attribute::StackProtect,
+ Attribute::StackProtectReq,
+ Attribute::StackProtectStrong,
+ Attribute::SafeStack,
+ Attribute::StructRet,
+ Attribute::SanitizeAddress,
+ Attribute::SanitizeThread,
+ Attribute::SanitizeMemory,
+ Attribute::UWTable,
+ Attribute::ZExt})
+ DXILAttributeMask.addAttribute(Kind);
+ AttributeMask Result;
+ for (Attribute::AttrKind Kind = Attribute::None;
+ Kind != Attribute::EndAttrKinds;
+ Kind = Attribute::AttrKind(Kind + 1)) {
+ if (!DXILAttributeMask.contains(Kind))
+ Result.addAttribute(Kind);
+ }
+ return Result;
+ }();
+ return Result;
}
+} // namespace dxil
+} // namespace llvm
+
+namespace {
static void collectDeadStringAttrs(AttributeMask &DeadAttrs, AttributeSet &&AS,
const StringSet<> &LiveKeys,
@@ -177,15 +193,8 @@ class DXILPrepareModule : public ModulePass {
public:
bool runOnModule(Module &M) override {
- M.convertFromNewDbgValues();
-
PointerTypeMap PointerTypes = PointerTypeAnalysis::run(M);
- AttributeMask AttrMask;
- for (Attribute::AttrKind I = Attribute::None; I != Attribute::EndAttrKinds;
- I = Attribute::AttrKind(I + 1)) {
- if (!isValidForDXIL(I))
- AttrMask.addAttribute(I);
- }
+ const AttributeMask &AttrMask = getNonDXILAttributeMask();
const dxil::ModuleMetadataInfo MetadataInfo =
getAnalysis<DXILMetadataAnalysisWrapperPass>().getModuleMetadata();
diff --git a/llvm/lib/Target/DirectX/DirectX.h b/llvm/lib/Target/DirectX/DirectX.h
index dfeb1ab12665d..3aa91ca75dd4b 100644
--- a/llvm/lib/Target/DirectX/DirectX.h
+++ b/llvm/lib/Target/DirectX/DirectX.h
@@ -12,6 +12,7 @@
#define LLVM_LIB_TARGET_DIRECTX_DIRECTX_H
namespace llvm {
+class AttributeMask;
class FunctionPass;
class ModulePass;
class PassRegistry;
@@ -126,6 +127,9 @@ void initializeDXILFinalizeLinkageLegacyPass(PassRegistry &);
/// Pass to finalize linkage of functions.
ModulePass *createDXILFinalizeLinkageLegacyPass();
+namespace dxil {
+const AttributeMask &getNonDXILAttributeMask();
+} // namespace dxil
} // namespace llvm
#endif // LLVM_LIB_TARGET_DIRECTX_DIRECTX_H
diff --git a/llvm/lib/Target/DirectX/DirectXIRPasses/DXILDebugInfo.cpp b/llvm/lib/Target/DirectX/DirectXIRPasses/DXILDebugInfo.cpp
index 0fa81186000f9..7ccf46ab9239e 100644
--- a/llvm/lib/Target/DirectX/DirectXIRPasses/DXILDebugInfo.cpp
+++ b/llvm/lib/Target/DirectX/DirectXIRPasses/DXILDebugInfo.cpp
@@ -7,7 +7,9 @@
//===----------------------------------------------------------------------===//
#include "DXILDebugInfo.h"
+#include "DirectX.h"
#include "llvm/BinaryFormat/Dwarf.h"
+#include "llvm/IR/AttributeMask.h"
#include "llvm/IR/DebugInfo.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicsDirectX.h"
@@ -64,11 +66,19 @@ static void replaceDbgValue(Module &M, DXILDebugInfoMap &Res) {
}
DXILDebugInfoMap DXILDebugInfoPass::run(Module &M) {
+ M.convertFromNewDbgValues();
+
DXILDebugInfoMap Res;
DebugInfoFinder DIF;
DIF.processModule(M);
+ const AttributeMask &AttrMask = getNonDXILAttributeMask();
for (auto &F : M) {
+ F.removeFnAttrs(AttrMask);
+ F.removeRetAttrs(AttrMask);
+ for (unsigned ArgNo = 0; ArgNo != F.arg_size(); ++ArgNo)
+ F.removeParamAttrs(ArgNo, AttrMask);
+
for (auto &BB : F) {
for (auto &I : make_early_inc_range(reverse(BB))) {
if (auto *DL = dyn_cast<DbgLabelInst>(&I)) {
``````````
</details>
https://github.com/llvm/llvm-project/pull/201336
More information about the llvm-branch-commits
mailing list