Skip to content

Commit 3ac6807

Browse files
committed
[DirectX] Lower ops after translating metadata
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 f8291d2 commit 3ac6807

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"
@@ -751,6 +754,8 @@ PreservedAnalyses DXILOpLowering::run(Module &M, ModuleAnalysisManager &MAM) {
751754
return PreservedAnalyses::all();
752755
PreservedAnalyses PA;
753756
PA.preserve<DXILResourceBindingAnalysis>();
757+
PA.preserve<DXILMetadataAnalysis>();
758+
PA.preserve<ShaderFlagsAnalysis>();
754759
return PA;
755760
}
756761

@@ -773,6 +778,9 @@ class DXILOpLoweringLegacy : public ModulePass {
773778
AU.addRequired<DXILResourceTypeWrapperPass>();
774779
AU.addRequired<DXILResourceBindingWrapperPass>();
775780
AU.addPreserved<DXILResourceBindingWrapperPass>();
781+
AU.addPreserved<DXILResourceMDWrapper>();
782+
AU.addPreserved<DXILMetadataAnalysisWrapperPass>();
783+
AU.addPreserved<ShaderFlagsAnalysisWrapper>();
776784
}
777785
};
778786
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
@@ -389,6 +389,7 @@ class DXILTranslateMetadataLegacy : public ModulePass {
389389
AU.addPreserved<DXILResourceBindingWrapperPass>();
390390
AU.addPreserved<DXILResourceMDWrapper>();
391391
AU.addPreserved<DXILMetadataAnalysisWrapperPass>();
392+
AU.addPreserved<ShaderFlagsAnalysisWrapper>();
392393
}
393394

394395
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
@@ -96,8 +96,8 @@ class DirectXPassConfig : public TargetPassConfig {
9696
DxilScalarOptions.ScalarizeLoadStore = true;
9797
addPass(createDXILFlattenArraysLegacyPass());
9898
addPass(createScalarizerPass(DxilScalarOptions));
99-
addPass(createDXILOpLoweringLegacyPass());
10099
addPass(createDXILTranslateMetadataLegacyPass());
100+
addPass(createDXILOpLoweringLegacyPass());
101101
addPass(createDXILPrepareModulePass());
102102
}
103103
};

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: Target Transform Information
99
; CHECK-NEXT: DXIL Resource Type Analysis
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
@@ -16,11 +21,19 @@
1621
; CHECK-NEXT: Dominator Tree Construction
1722
; CHECK-NEXT: Scalarize vector operations
1823
; CHECK-NEXT: DXIL Resource Binding Analysis
19-
; CHECK-NEXT: DXIL Op Lowering
2024
; CHECK-NEXT: DXIL resource Information
2125
; CHECK-NEXT: DXIL Shader Flag Analysis
2226
; CHECK-NEXT: DXIL Module Metadata analysis
2327
; CHECK-NEXT: DXIL Translate Metadata
28+
; CHECK-NEXT: DXIL Op Lowering
2429
; CHECK-NEXT: DXIL Prepare Module
25-
; CHECK-NEXT: DXIL Metadata Pretty Printer
26-
; CHECK-NEXT: Print Module IR
30+
31+
; CHECK-ASM-NEXT: DXIL Metadata Pretty Printer
32+
; CHECK-ASM-NEXT: Print Module IR
33+
34+
; CHECK-OBJ-NEXT: DXIL Embedder
35+
; CHECK-OBJ-NEXT: DXContainer Global Emitter
36+
; CHECK-OBJ-NEXT: FunctionPass Manager
37+
; CHECK-OBJ-NEXT: Lazy Machine Block Frequency Analysis
38+
; CHECK-OBJ-NEXT: Machine Optimization Remark Emitter
39+
; CHECK-OBJ-NEXT: DXIL Assembly Printer

0 commit comments

Comments
 (0)