Skip to content

Commit e43cefc

Browse files
committed
[SPIRV][SPIRVPrepareGlobals] Add pass skeleton
Add a pass where we can do IR->IR preprocessing of global-variables.
1 parent e2a2c03 commit e43cefc

File tree

5 files changed

+50
-0
lines changed

5 files changed

+50
-0
lines changed

llvm/lib/Target/SPIRV/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff 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

llvm/lib/Target/SPIRV/SPIRV.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ FunctionPass *createSPIRVPreLegalizerCombiner();
3131
FunctionPass *createSPIRVPreLegalizerPass();
3232
FunctionPass *createSPIRVPostLegalizerPass();
3333
ModulePass *createSPIRVEmitIntrinsicsPass(SPIRVTargetMachine *TM);
34+
ModulePass *createSPIRVPrepareGlobalsPass();
3435
MachineFunctionPass *createSPIRVEmitNonSemanticDIPass(SPIRVTargetMachine *TM);
3536
InstructionSelector *
3637
createSPIRVInstructionSelector(const SPIRVTargetMachine &TM,
@@ -51,6 +52,7 @@ void initializeSPIRVLegalizePointerCastPass(PassRegistry &);
5152
void initializeSPIRVRegularizerPass(PassRegistry &);
5253
void initializeSPIRVMergeRegionExitTargetsPass(PassRegistry &);
5354
void initializeSPIRVPrepareFunctionsPass(PassRegistry &);
55+
void initializeSPIRVPrepareGlobalsPass(PassRegistry &);
5456
void initializeSPIRVStripConvergentIntrinsicsPass(PassRegistry &);
5557
void initializeSPIRVLegalizeImplicitBindingPass(PassRegistry &);
5658
} // namespace llvm
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
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

llvm/lib/Target/SPIRV/SPIRVTargetMachine.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff 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

177179
void SPIRVPassConfig::addISelPrepare() {

llvm/test/CodeGen/SPIRV/llc-pipeline.ll

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
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
@@ -130,6 +131,7 @@
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

0 commit comments

Comments
 (0)