Skip to content

Commit 07734f7

Browse files
committed
Rename getShaderFlagsMask() as getFunctionFlags()
Print Module flags notes only once. Delete extraneous checks in test Declare updateFunctionFlags as static Use comparator instead of constructing a fuction-mask pair to search in getFunctionFlags()
1 parent 70e46e0 commit 07734f7

File tree

7 files changed

+44
-56
lines changed

7 files changed

+44
-56
lines changed

llvm/lib/Target/DirectX/DXILShaderFlags.cpp

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
using namespace llvm;
2323
using namespace llvm::dxil;
2424

25-
void ModuleShaderFlags::updateFunctionFlags(ComputedShaderFlags &CSF,
26-
const Instruction &I) {
25+
static void updateFunctionFlags(ComputedShaderFlags &CSF,
26+
const Instruction &I) {
2727
if (!CSF.Doubles)
2828
CSF.Doubles = I.getType()->isDoubleTy();
2929

@@ -83,9 +83,11 @@ void ComputedShaderFlags::print(raw_ostream &OS) const {
8383

8484
/// Return the shader flags mask of the specified function Func.
8585
const ComputedShaderFlags &
86-
ModuleShaderFlags::getShaderFlagsMask(const Function *Func) const {
87-
std::pair<Function const *, ComputedShaderFlags> V{Func, {}};
88-
const auto Iter = llvm::lower_bound(FunctionFlags, V);
86+
ModuleShaderFlags::getFunctionFlags(const Function *Func) const {
87+
const auto Iter = llvm::lower_bound(
88+
FunctionFlags, Func,
89+
[](const std::pair<const Function *, ComputedShaderFlags> FSM,
90+
const Function *FindFunc) { return (FSM.first < FindFunc); });
8991
assert((Iter != FunctionFlags.end() && Iter->first == Func) &&
9092
"No Shader Flags Mask exists for function");
9193
return Iter->second;
@@ -107,12 +109,17 @@ ModuleShaderFlags ShaderFlagsAnalysis::run(Module &M,
107109
PreservedAnalyses ShaderFlagsAnalysisPrinter::run(Module &M,
108110
ModuleAnalysisManager &AM) {
109111
const ModuleShaderFlags &FlagsInfo = AM.getResult<ShaderFlagsAnalysis>(M);
112+
// Print description of combined shader flags for all module functions
113+
OS << "; Combined Shader Flags for Module\n";
114+
FlagsInfo.getCombinedFlags().print(OS);
115+
// Print shader flags mask for each of the module functions
116+
OS << "; Shader Flags for Module Functions\n";
110117
for (const auto &F : M.getFunctionList()) {
111118
if (F.isDeclaration())
112119
continue;
113-
OS << "; Shader Flags mask for Function: " << F.getName() << "\n";
114-
auto SFMask = FlagsInfo.getShaderFlagsMask(&F);
115-
SFMask.print(OS);
120+
auto SFMask = FlagsInfo.getFunctionFlags(&F);
121+
OS << formatv("; Function {0} : {1:x8}\n;\n", F.getName(),
122+
(uint64_t)(SFMask));
116123
}
117124

118125
return PreservedAnalyses::all();

llvm/lib/Target/DirectX/DXILShaderFlags.h

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,18 +85,16 @@ struct ComputedShaderFlags {
8585

8686
struct ModuleShaderFlags {
8787
void initialize(const Module &);
88-
const ComputedShaderFlags &getShaderFlagsMask(const Function *) const;
89-
const ComputedShaderFlags getCombinedFlags() const { return CombinedSFMask; }
88+
const ComputedShaderFlags &getFunctionFlags(const Function *) const;
89+
const ComputedShaderFlags &getCombinedFlags() const { return CombinedSFMask; }
9090

9191
private:
92-
/// Vector of Function-Shader Flag mask pairs representing properties of each
93-
/// of the functions in the module. Shader Flags of each function represent
94-
/// both module-level and function-level flags
92+
/// Vector of sorted Function-Shader Flag mask pairs representing properties
93+
/// of each of the functions in the module. Shader Flags of each function
94+
/// represent both module-level and function-level flags
9595
SmallVector<std::pair<Function const *, ComputedShaderFlags>> FunctionFlags;
9696
/// Combined Shader Flag Mask of all functions of the module
9797
ComputedShaderFlags CombinedSFMask{};
98-
99-
void updateFunctionFlags(ComputedShaderFlags &CSF, const Instruction &I);
10098
};
10199

102100
class ShaderFlagsAnalysis : public AnalysisInfoMixin<ShaderFlagsAnalysis> {

llvm/lib/Target/DirectX/DXILTranslateMetadata.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ static void translateMetadata(Module &M, const DXILResourceMap &DRM,
328328

329329
for (const EntryProperties &EntryProp : MMDI.EntryPropertyVec) {
330330
const ComputedShaderFlags &EntrySFMask =
331-
ShaderFlags.getShaderFlagsMask(EntryProp.Entry);
331+
ShaderFlags.getFunctionFlags(EntryProp.Entry);
332332

333333
// If ShaderProfile is Library, mask is already consolidated in the
334334
// top-level library node. Hence it is not emitted.

llvm/test/CodeGen/DirectX/ShaderFlags/double-extensions-obj-test.ll

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,4 @@ attributes #0 = { convergent norecurse nounwind "hlsl.export"}
1414
; CHECK-NEXT: Doubles: true
1515
; CHECK-NOT: {{[A-Za-z]+: +true}}
1616
; CHECK: DX11_1_DoubleExtensions: true
17-
; CHECK-NOT: {{[A-Za-z]+: +true}}
18-
; CHECK: NextUnusedBit: false
19-
; CHECK: ...
17+

llvm/test/CodeGen/DirectX/ShaderFlags/double-extensions.ll

Lines changed: 7 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,46 +2,24 @@
22

33
target triple = "dxil-pc-shadermodel6.7-library"
44

5-
; CHECK: ; Shader Flags mask for Function: test_fdiv_double
5+
; CHECK: ; Combined Shader Flags for Module
66
; CHECK-NEXT: ; Shader Flags Value: 0x00000044
77
; CHECK-NEXT: ;
88
; CHECK-NEXT: ; Note: shader requires additional functionality:
99
; CHECK-NEXT: ; Double-precision floating point
1010
; CHECK-NEXT: ; Double-precision extensions for 11.1
1111
; CHECK-NEXT: ; Note: extra DXIL module flags:
1212
; CHECK-NEXT: ;
13-
; CHECK-NEXT: ; Shader Flags mask for Function: test_uitofp_i64
14-
; CHECK-NEXT: ; Shader Flags Value: 0x00000044
15-
; CHECK-NEXT: ;
16-
; CHECK-NEXT: ; Note: shader requires additional functionality:
17-
; CHECK-NEXT: ; Double-precision floating point
18-
; CHECK-NEXT: ; Double-precision extensions for 11.1
19-
; CHECK-NEXT: ; Note: extra DXIL module flags:
20-
; CHECK-NEXT: ;
21-
; CHECK-NEXT: ; Shader Flags mask for Function: test_sitofp_i64
22-
; CHECK-NEXT: ; Shader Flags Value: 0x00000044
23-
; CHECK-NEXT: ;
24-
; CHECK-NEXT: ; Note: shader requires additional functionality:
25-
; CHECK-NEXT: ; Double-precision floating point
26-
; CHECK-NEXT: ; Double-precision extensions for 11.1
27-
; CHECK-NEXT: ; Note: extra DXIL module flags:
28-
; CHECK-NEXT: ;
29-
; CHECK-NEXT: ; Shader Flags mask for Function: test_fptoui_i32
30-
; CHECK-NEXT: ; Shader Flags Value: 0x00000044
13+
; CHECK-NEXT: ; Shader Flags for Module Functions
14+
; CHECK-NEXT: ; Function test_fdiv_double : 0x00000044
3115
; CHECK-NEXT: ;
32-
; CHECK-NEXT: ; Note: shader requires additional functionality:
33-
; CHECK-NEXT: ; Double-precision floating point
34-
; CHECK-NEXT: ; Double-precision extensions for 11.1
35-
; CHECK-NEXT: ; Note: extra DXIL module flags:
16+
; CHECK-NEXT: ; Function test_uitofp_i64 : 0x00000044
3617
; CHECK-NEXT: ;
37-
; CHECK-NEXT: ; Shader Flags mask for Function: test_fptosi_i64
38-
; CHECK-NEXT: ; Shader Flags Value: 0x00000044
18+
; CHECK-NEXT: ; Function test_sitofp_i64 : 0x00000044
3919
; CHECK-NEXT: ;
40-
; CHECK-NEXT: ; Note: shader requires additional functionality:
41-
; CHECK-NEXT: ; Double-precision floating point
42-
; CHECK-NEXT: ; Double-precision extensions for 11.1
43-
; CHECK-NEXT: ; Note: extra DXIL module flags:
20+
; CHECK-NEXT: ; Function test_fptoui_i32 : 0x00000044
4421
; CHECK-NEXT: ;
22+
; CHECK-NEXT: ; Function test_fptosi_i64 : 0x00000044
4523

4624
define double @test_fdiv_double(double %a, double %b) #0 {
4725
%res = fdiv double %a, %b

llvm/test/CodeGen/DirectX/ShaderFlags/doubles.ll

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,15 @@
33

44
target triple = "dxil-pc-shadermodel6.7-library"
55

6-
; CHECK: ; Shader Flags mask for Function: add
7-
; CHECK-NEXT: ; Shader Flags Value: 0x00000004
8-
; CHECK: ; Note: shader requires additional functionality:
9-
; CHECK-NEXT: ; Double-precision floating point
10-
; CHECK-NEXT: ; Note: extra DXIL module flags:
11-
; CHECK-NEXT: {{^;$}}
6+
;CHECK: ; Combined Shader Flags for Module
7+
;CHECK-NEXT: ; Shader Flags Value: 0x00000004
8+
;CHECK-NEXT: ;
9+
;CHECK-NEXT: ; Note: shader requires additional functionality:
10+
;CHECK-NEXT: ; Double-precision floating point
11+
;CHECK-NEXT: ; Note: extra DXIL module flags:
12+
;CHECK-NEXT: ;
13+
;CHECK-NEXT: ; Shader Flags for Module Functions
14+
;CHECK-NEXT: ; Function add : 0x00000004
1215

1316
define double @add(double %a, double %b) #0 {
1417
%sum = fadd double %a, %b

llvm/test/CodeGen/DirectX/ShaderFlags/no_flags.ll

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@
22

33
target triple = "dxil-pc-shadermodel6.7-library"
44

5-
; CHECK: ; Shader Flags mask for Function: add
6-
; CHECK-NEXT: ; Shader Flags Value: 0x00000000
5+
;CHECK: ; Combined Shader Flags for Module
6+
;CHECK-NEXT: ; Shader Flags Value: 0x00000000
7+
;CHECK-NEXT: ;
8+
;CHECK-NEXT: ; Shader Flags for Module Functions
9+
;CHECK-NEXT: ; Function add : 0x00000000
10+
711
define i32 @add(i32 %a, i32 %b) {
812
%sum = add i32 %a, %b
913
ret i32 %sum

0 commit comments

Comments
 (0)