diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index 3951ad01497cc..23445ebc369fe 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -57,6 +57,7 @@ #include "llvm/TargetParser/SubtargetFeature.h" #include "llvm/TargetParser/Triple.h" #include "llvm/Transforms/HipStdPar/HipStdPar.h" +#include "llvm/Transforms/HLSL/DXILFinalizeLinkage.h" #include "llvm/Transforms/IPO/EmbedBitcodePass.h" #include "llvm/Transforms/IPO/LowerTypeTests.h" #include "llvm/Transforms/IPO/ThinLTOBitcodeWriter.h" @@ -82,6 +83,7 @@ #include "llvm/Transforms/ObjCARC.h" #include "llvm/Transforms/Scalar/EarlyCSE.h" #include "llvm/Transforms/Scalar/GVN.h" +#include "llvm/Transforms/IPO/GlobalOpt.h" #include "llvm/Transforms/Scalar/JumpThreading.h" #include "llvm/Transforms/Utils/Debugify.h" #include "llvm/Transforms/Utils/ModuleUtils.h" @@ -1164,6 +1166,12 @@ void EmitAssemblyHelper::RunOptimizationPipeline( LangOpts.HIPStdParInterposeAlloc) MPM.addPass(HipStdParAllocationInterpositionPass()); + if (LangOpts.HLSL) { + // HLSL legalization passes + MPM.addPass(DXILFinalizeLinkage()); + MPM.addPass(GlobalOptPass()); + } + // Now that we have all of the passes ready, run them. { PrettyStackTraceString CrashInfo("Optimizer"); diff --git a/clang/lib/CodeGen/CMakeLists.txt b/clang/lib/CodeGen/CMakeLists.txt index 868ec847b9634..1c7929219fcfc 100644 --- a/clang/lib/CodeGen/CMakeLists.txt +++ b/clang/lib/CodeGen/CMakeLists.txt @@ -14,6 +14,7 @@ set(LLVM_LINK_COMPONENTS FrontendOpenMP FrontendOffloading HIPStdPar + HLSL IPO IRPrinter IRReader diff --git a/llvm/lib/Target/DirectX/DXILFinalizeLinkage.h b/llvm/include/llvm/Transforms/HLSL/DXILFinalizeLinkage.h similarity index 100% rename from llvm/lib/Target/DirectX/DXILFinalizeLinkage.h rename to llvm/include/llvm/Transforms/HLSL/DXILFinalizeLinkage.h diff --git a/llvm/lib/Target/DirectX/CMakeLists.txt b/llvm/lib/Target/DirectX/CMakeLists.txt index 26315db891b57..b7d2034fbdadb 100644 --- a/llvm/lib/Target/DirectX/CMakeLists.txt +++ b/llvm/lib/Target/DirectX/CMakeLists.txt @@ -21,7 +21,6 @@ add_llvm_target(DirectXCodeGen DirectXTargetTransformInfo.cpp DXContainerGlobals.cpp DXILDataScalarization.cpp - DXILFinalizeLinkage.cpp DXILFlattenArrays.cpp DXILIntrinsicExpansion.cpp DXILOpBuilder.cpp diff --git a/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp b/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp index ecb1bf775f857..c969abb43f858 100644 --- a/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp +++ b/llvm/lib/Target/DirectX/DirectXTargetMachine.cpp @@ -61,7 +61,6 @@ extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeDirectXTarget() { initializeDXILTranslateMetadataLegacyPass(*PR); initializeDXILResourceMDWrapperPass(*PR); initializeShaderFlagsAnalysisWrapperPass(*PR); - initializeDXILFinalizeLinkageLegacyPass(*PR); } class DXILTargetObjectFile : public TargetLoweringObjectFile { @@ -91,7 +90,6 @@ class DirectXPassConfig : public TargetPassConfig { FunctionPass *createTargetRegisterAllocator(bool) override { return nullptr; } void addCodeGenPrepare() override { - addPass(createDXILFinalizeLinkageLegacyPass()); addPass(createDXILIntrinsicExpansionLegacyPass()); addPass(createDXILDataScalarizationLegacyPass()); addPass(createDXILFlattenArraysLegacyPass()); diff --git a/llvm/lib/Target/SPIRV/SPIRVTargetMachine.cpp b/llvm/lib/Target/SPIRV/SPIRVTargetMachine.cpp index 098c7a6fba50e..026384a6e71c8 100644 --- a/llvm/lib/Target/SPIRV/SPIRVTargetMachine.cpp +++ b/llvm/lib/Target/SPIRV/SPIRVTargetMachine.cpp @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// #include "SPIRVTargetMachine.h" +#include "../DirectX/DirectX.h" #include "SPIRV.h" #include "SPIRVCallLowering.h" #include "SPIRVGlobalRegistry.h" @@ -224,6 +225,7 @@ void SPIRVPassConfig::addPreLegalizeMachineIR() { // Use the default legalizer. bool SPIRVPassConfig::addLegalizeMachineIR() { + addPass(new Legalizer()); addPass(createSPIRVPostLegalizerPass()); return false; diff --git a/llvm/lib/Transforms/CMakeLists.txt b/llvm/lib/Transforms/CMakeLists.txt index 7046f2f4b1d2c..e3c13a19f6de1 100644 --- a/llvm/lib/Transforms/CMakeLists.txt +++ b/llvm/lib/Transforms/CMakeLists.txt @@ -9,3 +9,4 @@ add_subdirectory(ObjCARC) add_subdirectory(Coroutines) add_subdirectory(CFGuard) add_subdirectory(HipStdPar) +add_subdirectory(HLSL) diff --git a/llvm/lib/Transforms/HLSL/CMakeLists.txt b/llvm/lib/Transforms/HLSL/CMakeLists.txt new file mode 100644 index 0000000000000..886a1737ab495 --- /dev/null +++ b/llvm/lib/Transforms/HLSL/CMakeLists.txt @@ -0,0 +1,18 @@ +add_llvm_component_library(LLVMHlsl + DXILFinalizeLinkage.cpp + + ADDITIONAL_HEADER_DIRS + ${LLVM_MAIN_INCLUDE_DIR}/llvm/Transforms/HLSL + + DEPENDS + intrinsics_gen + LLVMAnalysis + + COMPONENT_NAME + HLSL + + LINK_COMPONENTS + Analysis + Core + Support + TransformUtils) diff --git a/llvm/lib/Target/DirectX/DXILFinalizeLinkage.cpp b/llvm/lib/Transforms/HLSL/DXILFinalizeLinkage.cpp similarity index 70% rename from llvm/lib/Target/DirectX/DXILFinalizeLinkage.cpp rename to llvm/lib/Transforms/HLSL/DXILFinalizeLinkage.cpp index 91ac758150fb4..c0dc4a6aa79c5 100644 --- a/llvm/lib/Target/DirectX/DXILFinalizeLinkage.cpp +++ b/llvm/lib/Transforms/HLSL/DXILFinalizeLinkage.cpp @@ -6,11 +6,9 @@ // //===----------------------------------------------------------------------===// -#include "DXILFinalizeLinkage.h" -#include "DirectX.h" +#include "llvm/Transforms/HLSL/DXILFinalizeLinkage.h" #include "llvm/IR/Function.h" #include "llvm/IR/GlobalValue.h" -#include "llvm/IR/Metadata.h" #include "llvm/IR/Module.h" #define DEBUG_TYPE "dxil-finalize-linkage" @@ -20,6 +18,12 @@ using namespace llvm; static bool finalizeLinkage(Module &M) { SmallPtrSet Funcs; + for(auto &Var : M.globals()) { + if (Var.getLinkage() == GlobalValue::ExternalLinkage) { + Var.setLinkage(GlobalValue::InternalLinkage); + } + } + // Collect non-entry and non-exported functions to set to internal linkage. for (Function &EF : M.functions()) { if (EF.isIntrinsic()) @@ -44,19 +48,4 @@ PreservedAnalyses DXILFinalizeLinkage::run(Module &M, if (finalizeLinkage(M)) return PreservedAnalyses::none(); return PreservedAnalyses::all(); -} - -bool DXILFinalizeLinkageLegacy::runOnModule(Module &M) { - return finalizeLinkage(M); -} - -char DXILFinalizeLinkageLegacy::ID = 0; - -INITIALIZE_PASS_BEGIN(DXILFinalizeLinkageLegacy, DEBUG_TYPE, - "DXIL Finalize Linkage", false, false) -INITIALIZE_PASS_END(DXILFinalizeLinkageLegacy, DEBUG_TYPE, - "DXIL Finalize Linkage", false, false) - -ModulePass *llvm::createDXILFinalizeLinkageLegacyPass() { - return new DXILFinalizeLinkageLegacy(); -} +} \ No newline at end of file