Skip to content

Commit bfd0510

Browse files
authored
[DirectX] Lower ops after translating metadata (#120157)
Move the DXILOpLoweringPass after DXILTranslateMetadata, and add asserts in DXILShaderFlags to ensure it isn't scheduled after op lowering. This will allow us to rely on DirectX intrinsics in the shader flags analysis rather than having to recover information from lowered operations. Fixes #120119.
1 parent 6fb967e commit bfd0510

File tree

7 files changed

+34
-9
lines changed

7 files changed

+34
-9
lines changed

llvm/lib/Target/DirectX/DXILOpLowering.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,11 @@
1010
#include "DXILConstants.h"
1111
#include "DXILIntrinsicExpansion.h"
1212
#include "DXILOpBuilder.h"
13+
#include "DXILResourceAnalysis.h"
14+
#include "DXILShaderFlags.h"
1315
#include "DirectX.h"
1416
#include "llvm/ADT/SmallVector.h"
17+
#include "llvm/Analysis/DXILMetadataAnalysis.h"
1518
#include "llvm/Analysis/DXILResource.h"
1619
#include "llvm/CodeGen/Passes.h"
1720
#include "llvm/IR/DiagnosticInfo.h"
@@ -763,6 +766,8 @@ PreservedAnalyses DXILOpLowering::run(Module &M, ModuleAnalysisManager &MAM) {
763766
return PreservedAnalyses::all();
764767
PreservedAnalyses PA;
765768
PA.preserve<DXILResourceBindingAnalysis>();
769+
PA.preserve<DXILMetadataAnalysis>();
770+
PA.preserve<ShaderFlagsAnalysis>();
766771
return PA;
767772
}
768773

@@ -785,6 +790,9 @@ class DXILOpLoweringLegacy : public ModulePass {
785790
AU.addRequired<DXILResourceTypeWrapperPass>();
786791
AU.addRequired<DXILResourceBindingWrapperPass>();
787792
AU.addPreserved<DXILResourceBindingWrapperPass>();
793+
AU.addPreserved<DXILResourceMDWrapper>();
794+
AU.addPreserved<DXILMetadataAnalysisWrapperPass>();
795+
AU.addPreserved<ShaderFlagsAnalysisWrapper>();
788796
}
789797
};
790798
char DXILOpLoweringLegacy::ID = 0;

llvm/lib/Target/DirectX/DXILShaderFlags.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,11 @@ static void updateFunctionFlags(ComputedShaderFlags &CSF,
4949
void ModuleShaderFlags::initialize(const Module &M) {
5050
// Collect shader flags for each of the functions
5151
for (const auto &F : M.getFunctionList()) {
52-
if (F.isDeclaration())
52+
if (F.isDeclaration()) {
53+
assert(!F.getName().starts_with("dx.op.") &&
54+
"DXIL Shader Flag analysis should not be run post-lowering.");
5355
continue;
56+
}
5457
ComputedShaderFlags CSF;
5558
for (const auto &BB : F)
5659
for (const auto &I : BB)

llvm/lib/Target/DirectX/DXILTranslateMetadata.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,7 @@ class DXILTranslateMetadataLegacy : public ModulePass {
393393
AU.addPreserved<DXILResourceBindingWrapperPass>();
394394
AU.addPreserved<DXILResourceMDWrapper>();
395395
AU.addPreserved<DXILMetadataAnalysisWrapperPass>();
396+
AU.addPreserved<ShaderFlagsAnalysisWrapper>();
396397
}
397398

398399
bool runOnModule(Module &M) override {

llvm/lib/Target/DirectX/DirectXTargetMachine.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,8 @@ class DirectXPassConfig : public TargetPassConfig {
9999
ScalarizerPassOptions DxilScalarOptions;
100100
DxilScalarOptions.ScalarizeLoadStore = true;
101101
addPass(createScalarizerPass(DxilScalarOptions));
102-
addPass(createDXILOpLoweringLegacyPass());
103102
addPass(createDXILTranslateMetadataLegacyPass());
103+
addPass(createDXILOpLoweringLegacyPass());
104104
addPass(createDXILPrepareModulePass());
105105
}
106106
};

llvm/test/CodeGen/DirectX/CreateHandle.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; RUN: opt -S -passes=dxil-op-lower,dxil-translate-metadata %s | FileCheck %s
1+
; RUN: opt -S -passes=dxil-translate-metadata,dxil-op-lower %s | FileCheck %s
22
; RUN: opt -S -passes=dxil-pretty-printer %s 2>&1 >/dev/null | FileCheck --check-prefix=CHECK-PRETTY %s
33

44
; CHECK-PRETTY: Type Format Dim ID HLSL Bind Count

llvm/test/CodeGen/DirectX/CreateHandleFromBinding.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; RUN: opt -S -passes=dxil-op-lower,dxil-translate-metadata %s | FileCheck %s
1+
; RUN: opt -S -passes=dxil-translate-metadata,dxil-op-lower %s | FileCheck %s
22
; RUN: opt -S -passes=dxil-pretty-printer %s 2>&1 >/dev/null | FileCheck --check-prefix=CHECK-PRETTY %s
33

44
; CHECK-PRETTY: Type Format Dim ID HLSL Bind Count
Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1-
; RUN: llc -mtriple=dxil-pc-shadermodel6.3-library -debug-pass=Structure < %s -o /dev/null 2>&1 | \
2-
; RUN: grep -v "Verify generated machine code" | FileCheck %s
1+
; RUN: llc -filetype=asm -mtriple=dxil-pc-shadermodel6.3-library -debug-pass=Structure < %s -o /dev/null 2>&1 | grep -v "Verify generated machine code" | FileCheck %s --check-prefixes=CHECK,CHECK-ASM
2+
; RUN: llc -filetype=obj -mtriple=dxil-pc-shadermodel6.3-library -debug-pass=Structure < %s -o /dev/null 2>&1 | grep -v "Verify generated machine code" | FileCheck %s --check-prefixes=CHECK,CHECK-OBJ
33

44
; REQUIRES: asserts
55

66
; CHECK-LABEL: Pass Arguments:
77
; CHECK-NEXT: Target Library Information
88
; CHECK-NEXT: DXIL Resource Type Analysis
99
; CHECK-NEXT: Target Transform Information
10+
11+
; CHECK-OBJ-NEXT: Machine Module Information
12+
; CHECK-OBJ-NEXT: Machine Branch Probability Analysis
13+
; CHECK-OBJ-NEXT: Create Garbage Collector Module Metadata
14+
1015
; CHECK-NEXT: ModulePass Manager
1116
; CHECK-NEXT: DXIL Finalize Linkage
1217
; CHECK-NEXT: DXIL Intrinsic Expansion
@@ -17,11 +22,19 @@
1722
; CHECK-NEXT: Dominator Tree Construction
1823
; CHECK-NEXT: Scalarize vector operations
1924
; CHECK-NEXT: DXIL Resource Binding Analysis
20-
; CHECK-NEXT: DXIL Op Lowering
2125
; CHECK-NEXT: DXIL resource Information
2226
; CHECK-NEXT: DXIL Shader Flag Analysis
2327
; CHECK-NEXT: DXIL Module Metadata analysis
2428
; CHECK-NEXT: DXIL Translate Metadata
29+
; CHECK-NEXT: DXIL Op Lowering
2530
; CHECK-NEXT: DXIL Prepare Module
26-
; CHECK-NEXT: DXIL Metadata Pretty Printer
27-
; CHECK-NEXT: Print Module IR
31+
32+
; CHECK-ASM-NEXT: DXIL Metadata Pretty Printer
33+
; CHECK-ASM-NEXT: Print Module IR
34+
35+
; CHECK-OBJ-NEXT: DXIL Embedder
36+
; CHECK-OBJ-NEXT: DXContainer Global Emitter
37+
; CHECK-OBJ-NEXT: FunctionPass Manager
38+
; CHECK-OBJ-NEXT: Lazy Machine Block Frequency Analysis
39+
; CHECK-OBJ-NEXT: Machine Optimization Remark Emitter
40+
; CHECK-OBJ-NEXT: DXIL Assembly Printer

0 commit comments

Comments
 (0)