Skip to content

Commit 4e62f38

Browse files
committed
[HLSL] Create HLSL legalization passes
The semantics of HLSL require passes some passes to be run that will modify the llvm-ir created by clang to match what is expected by the backend. In this PR, wewe move the DXILFinalizeLinkage to be run for all backend. The pass is also renamed to HLSLFinalizeLinkage. A pass of the global opt pass is run afterwards. Fixes #122767.
1 parent 6518b12 commit 4e62f38

File tree

9 files changed

+29
-105
lines changed

9 files changed

+29
-105
lines changed

clang/lib/CodeGen/BackendUtil.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,10 @@
5656
#include "llvm/Target/TargetOptions.h"
5757
#include "llvm/TargetParser/SubtargetFeature.h"
5858
#include "llvm/TargetParser/Triple.h"
59+
#include "llvm/Transforms/HLSL/HLSLFinalizeLinkage.h"
5960
#include "llvm/Transforms/HipStdPar/HipStdPar.h"
6061
#include "llvm/Transforms/IPO/EmbedBitcodePass.h"
62+
#include "llvm/Transforms/IPO/GlobalOpt.h"
6163
#include "llvm/Transforms/IPO/LowerTypeTests.h"
6264
#include "llvm/Transforms/IPO/ThinLTOBitcodeWriter.h"
6365
#include "llvm/Transforms/InstCombine/InstCombine.h"
@@ -1097,6 +1099,12 @@ void EmitAssemblyHelper::RunOptimizationPipeline(
10971099
if (CodeGenOpts.LinkBitcodePostopt)
10981100
MPM.addPass(LinkInModulesPass(BC));
10991101

1102+
if (LangOpts.HLSL) {
1103+
// HLSL legalization passes
1104+
MPM.addPass(HLSLFinalizeLinkage());
1105+
MPM.addPass(GlobalOptPass());
1106+
}
1107+
11001108
// Add a verifier pass if requested. We don't have to do this if the action
11011109
// requires code generation because there will already be a verifier pass in
11021110
// the code-generation pipeline.

clang/lib/CodeGen/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ set(LLVM_LINK_COMPONENTS
1414
FrontendOpenMP
1515
FrontendOffloading
1616
HIPStdPar
17+
HLSL
1718
IPO
1819
IRPrinter
1920
IRReader

clang/test/CodeGenHLSL/inline-functions.hlsl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ unsigned RemoveDupes(unsigned Buf[MAX], unsigned size) {
6161
}
6262

6363

64-
RWBuffer<unsigned> Indices;
64+
RWBuffer<unsigned> Indices : register(u0);
6565

6666
// The mangled version of main only remains without inlining
6767
// because it has internal linkage from the start

llvm/lib/Target/DirectX/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ add_llvm_target(DirectXCodeGen
2121
DirectXTargetTransformInfo.cpp
2222
DXContainerGlobals.cpp
2323
DXILDataScalarization.cpp
24-
DXILFinalizeLinkage.cpp
2524
DXILFlattenArrays.cpp
2625
DXILIntrinsicExpansion.cpp
2726
DXILOpBuilder.cpp

llvm/lib/Target/DirectX/DXILFinalizeLinkage.cpp

Lines changed: 0 additions & 62 deletions
This file was deleted.

llvm/lib/Target/DirectX/DXILFinalizeLinkage.h

Lines changed: 0 additions & 39 deletions
This file was deleted.

llvm/lib/Target/DirectX/DirectXTargetMachine.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeDirectXTarget() {
6161
initializeDXILTranslateMetadataLegacyPass(*PR);
6262
initializeDXILResourceMDWrapperPass(*PR);
6363
initializeShaderFlagsAnalysisWrapperPass(*PR);
64-
initializeDXILFinalizeLinkageLegacyPass(*PR);
6564
}
6665

6766
class DXILTargetObjectFile : public TargetLoweringObjectFile {
@@ -91,7 +90,6 @@ class DirectXPassConfig : public TargetPassConfig {
9190

9291
FunctionPass *createTargetRegisterAllocator(bool) override { return nullptr; }
9392
void addCodeGenPrepare() override {
94-
addPass(createDXILFinalizeLinkageLegacyPass());
9593
addPass(createDXILIntrinsicExpansionLegacyPass());
9694
addPass(createDXILDataScalarizationLegacyPass());
9795
addPass(createDXILFlattenArraysLegacyPass());

llvm/lib/Transforms/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@ add_subdirectory(ObjCARC)
99
add_subdirectory(Coroutines)
1010
add_subdirectory(CFGuard)
1111
add_subdirectory(HipStdPar)
12+
add_subdirectory(HLSL)
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
add_llvm_component_library(LLVMHlsl
2+
HLSLFinalizeLinkage.cpp
3+
4+
ADDITIONAL_HEADER_DIRS
5+
${LLVM_MAIN_INCLUDE_DIR}/llvm/Transforms/HLSL
6+
7+
DEPENDS
8+
intrinsics_gen
9+
LLVMAnalysis
10+
11+
COMPONENT_NAME
12+
HLSL
13+
14+
LINK_COMPONENTS
15+
Analysis
16+
Core
17+
Support
18+
TransformUtils)

0 commit comments

Comments
 (0)