File tree Expand file tree Collapse file tree 5 files changed +50
-0
lines changed Expand file tree Collapse file tree 5 files changed +50
-0
lines changed Original file line number Diff line number Diff line change @@ -41,6 +41,7 @@ add_llvm_target(SPIRVCodeGen
4141 SPIRVPreLegalizerCombiner.cpp
4242 SPIRVPostLegalizer.cpp
4343 SPIRVPrepareFunctions.cpp
44+ SPIRVPrepareGlobals.cpp
4445 SPIRVRegisterBankInfo.cpp
4546 SPIRVRegisterInfo.cpp
4647 SPIRVRegularizer.cpp
Original file line number Diff line number Diff line change @@ -31,6 +31,7 @@ FunctionPass *createSPIRVPreLegalizerCombiner();
3131FunctionPass *createSPIRVPreLegalizerPass ();
3232FunctionPass *createSPIRVPostLegalizerPass ();
3333ModulePass *createSPIRVEmitIntrinsicsPass (SPIRVTargetMachine *TM);
34+ ModulePass *createSPIRVPrepareGlobalsPass ();
3435MachineFunctionPass *createSPIRVEmitNonSemanticDIPass (SPIRVTargetMachine *TM);
3536InstructionSelector *
3637createSPIRVInstructionSelector (const SPIRVTargetMachine &TM,
@@ -51,6 +52,7 @@ void initializeSPIRVLegalizePointerCastPass(PassRegistry &);
5152void initializeSPIRVRegularizerPass (PassRegistry &);
5253void initializeSPIRVMergeRegionExitTargetsPass (PassRegistry &);
5354void initializeSPIRVPrepareFunctionsPass (PassRegistry &);
55+ void initializeSPIRVPrepareGlobalsPass (PassRegistry &);
5456void initializeSPIRVStripConvergentIntrinsicsPass (PassRegistry &);
5557void initializeSPIRVLegalizeImplicitBindingPass (PassRegistry &);
5658} // namespace llvm
Original file line number Diff line number Diff line change 1+ // ===-- SPIRVPrepareGlobals.cpp - Prepare IR SPIRV globals ------*- C++ -*-===//
2+ //
3+ // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+ // See https://llvm.org/LICENSE.txt for license information.
5+ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+ //
7+ // ===----------------------------------------------------------------------===//
8+ //
9+ // The pass transforms IR globals that cannot be trivially mapped to SPIRV
10+ // into something that is trival to lower.
11+ //
12+ // ===----------------------------------------------------------------------===//
13+
14+ #include " SPIRV.h"
15+
16+ using namespace llvm ;
17+
18+ namespace {
19+
20+ struct SPIRVPrepareGlobals : public ModulePass {
21+ static char ID;
22+ SPIRVPrepareGlobals () : ModulePass(ID) {}
23+
24+ StringRef getPassName () const override {
25+ return " SPIRV prepare global variables" ;
26+ }
27+
28+ bool runOnModule (Module &M) override ;
29+ };
30+
31+ bool SPIRVPrepareGlobals::runOnModule (Module &M) { return false ; }
32+ char SPIRVPrepareGlobals::ID = 0 ;
33+
34+ } // namespace
35+
36+ INITIALIZE_PASS (SPIRVPrepareGlobals, " prepare-globals" ,
37+ " SPIRV prepare global variables" , false , false )
38+
39+ namespace llvm {
40+ ModulePass *createSPIRVPrepareGlobalsPass () {
41+ return new SPIRVPrepareGlobals ();
42+ }
43+ } // namespace llvm
Original file line number Diff line number Diff line change @@ -59,6 +59,7 @@ extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void LLVMInitializeSPIRVTarget() {
5959 initializeSPIRVEmitIntrinsicsPass (PR);
6060 initializeSPIRVEmitNonSemanticDIPass (PR);
6161 initializeSPIRVPrepareFunctionsPass (PR);
62+ initializeSPIRVPrepareGlobalsPass (PR);
6263 initializeSPIRVStripConvergentIntrinsicsPass (PR);
6364}
6465
@@ -172,6 +173,7 @@ void SPIRVPassConfig::addIRPasses() {
172173
173174 addPass (createSPIRVRegularizerPass ());
174175 addPass (createSPIRVPrepareFunctionsPass (TM));
176+ addPass (createSPIRVPrepareGlobalsPass ());
175177}
176178
177179void SPIRVPassConfig::addISelPrepare () {
Original file line number Diff line number Diff line change 3131; SPIRV-O0-NEXT: Expand reduction intrinsics
3232; SPIRV-O0-NEXT: SPIR-V Regularizer
3333; SPIRV-O0-NEXT: SPIRV prepare functions
34+ ; SPIRV-O0-NEXT: SPIRV prepare global variables
3435; SPIRV-O0-NEXT: FunctionPass Manager
3536; SPIRV-O0-NEXT: Lower invoke and unwind, for unwindless code generators
3637; SPIRV-O0-NEXT: Remove unreachable blocks from the CFG
130131; SPIRV-Opt-NEXT: Expand reduction intrinsics
131132; SPIRV-Opt-NEXT: SPIR-V Regularizer
132133; SPIRV-Opt-NEXT: SPIRV prepare functions
134+ ; SPIRV-Opt-NEXT: SPIRV prepare global variables
133135; SPIRV-Opt-NEXT: FunctionPass Manager
134136; SPIRV-Opt-NEXT: Dominator Tree Construction
135137; SPIRV-Opt-NEXT: Natural Loop Information
You can’t perform that action at this time.
0 commit comments