mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-06 20:37:05 +00:00
AMDGPU: Add stub custom CodeGenPrepare pass
This will do various things including ones CodeGenPrepare does, but with knowledge of uniform values. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273657 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a606472116
commit
11c2d4bf28
@ -51,6 +51,7 @@ FunctionPass *createSIFixSGPRCopiesPass();
|
||||
FunctionPass *createSICodeEmitterPass(formatted_raw_ostream &OS);
|
||||
FunctionPass *createSIDebuggerInsertNopsPass();
|
||||
FunctionPass *createSIInsertWaitsPass();
|
||||
FunctionPass *createAMDGPUCodeGenPreparePass(const TargetMachine *TM = nullptr);
|
||||
|
||||
ScheduleDAGInstrs *createSIMachineScheduler(MachineSchedContext *C);
|
||||
|
||||
@ -98,6 +99,9 @@ extern char &SIFixControlFlowLiveIntervalsID;
|
||||
void initializeAMDGPUAnnotateUniformValuesPass(PassRegistry&);
|
||||
extern char &AMDGPUAnnotateUniformValuesPassID;
|
||||
|
||||
void initializeAMDGPUCodeGenPreparePass(PassRegistry&);
|
||||
extern char &AMDGPUCodeGenPrepareID;
|
||||
|
||||
void initializeSIAnnotateControlFlowPass(PassRegistry&);
|
||||
extern char &SIAnnotateControlFlowPassID;
|
||||
|
||||
|
82
lib/Target/AMDGPU/AMDGPUCodeGenPrepare.cpp
Normal file
82
lib/Target/AMDGPU/AMDGPUCodeGenPrepare.cpp
Normal file
@ -0,0 +1,82 @@
|
||||
//===-- AMDGPUCodeGenPrepare.cpp ------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
/// \file
|
||||
/// This pass does misc. AMDGPU optimizations on IR before instruction
|
||||
/// selection.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "AMDGPU.h"
|
||||
#include "AMDGPUSubtarget.h"
|
||||
|
||||
#include "llvm/Analysis/DivergenceAnalysis.h"
|
||||
#include "llvm/CodeGen/Passes.h"
|
||||
#include "llvm/IR/InstVisitor.h"
|
||||
#include "llvm/IR/IRBuilder.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
|
||||
#define DEBUG_TYPE "amdgpu-codegenprepare"
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
namespace {
|
||||
|
||||
class AMDGPUCodeGenPrepare : public FunctionPass,
|
||||
public InstVisitor<AMDGPUCodeGenPrepare> {
|
||||
DivergenceAnalysis *DA;
|
||||
const TargetMachine *TM;
|
||||
|
||||
public:
|
||||
static char ID;
|
||||
AMDGPUCodeGenPrepare(const TargetMachine *TM = nullptr) :
|
||||
FunctionPass(ID),
|
||||
TM(TM) { }
|
||||
|
||||
bool doInitialization(Module &M) override;
|
||||
bool runOnFunction(Function &F) override;
|
||||
|
||||
const char *getPassName() const override {
|
||||
return "AMDGPU IR optimizations";
|
||||
}
|
||||
|
||||
void getAnalysisUsage(AnalysisUsage &AU) const override {
|
||||
AU.addRequired<DivergenceAnalysis>();
|
||||
AU.setPreservesAll();
|
||||
}
|
||||
};
|
||||
|
||||
} // End anonymous namespace
|
||||
|
||||
bool AMDGPUCodeGenPrepare::doInitialization(Module &M) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool AMDGPUCodeGenPrepare::runOnFunction(Function &F) {
|
||||
if (!TM || skipFunction(F))
|
||||
return false;
|
||||
|
||||
DA = &getAnalysis<DivergenceAnalysis>();
|
||||
visit(F);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
INITIALIZE_TM_PASS_BEGIN(AMDGPUCodeGenPrepare, DEBUG_TYPE,
|
||||
"AMDGPU IR optimizations", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(DivergenceAnalysis)
|
||||
INITIALIZE_TM_PASS_END(AMDGPUCodeGenPrepare, DEBUG_TYPE,
|
||||
"AMDGPU IR optimizations", false, false)
|
||||
|
||||
char AMDGPUCodeGenPrepare::ID = 0;
|
||||
|
||||
FunctionPass *llvm::createAMDGPUCodeGenPreparePass(const TargetMachine *TM) {
|
||||
return new AMDGPUCodeGenPrepare(TM);
|
||||
}
|
@ -60,6 +60,7 @@ extern "C" void LLVMInitializeAMDGPUTarget() {
|
||||
initializeAMDGPUAnnotateKernelFeaturesPass(*PR);
|
||||
initializeAMDGPUAnnotateUniformValuesPass(*PR);
|
||||
initializeAMDGPUPromoteAllocaPass(*PR);
|
||||
initializeAMDGPUCodeGenPreparePass(*PR);
|
||||
initializeSIAnnotateControlFlowPass(*PR);
|
||||
initializeSIDebuggerInsertNopsPass(*PR);
|
||||
initializeSIInsertWaitsPass(*PR);
|
||||
|
@ -33,6 +33,7 @@ add_llvm_target(AMDGPUCodeGen
|
||||
AMDGPUAnnotateKernelFeatures.cpp
|
||||
AMDGPUAnnotateUniformValues.cpp
|
||||
AMDGPUAsmPrinter.cpp
|
||||
AMDGPUCodeGenPrepare.cpp
|
||||
AMDGPUFrameLowering.cpp
|
||||
AMDGPUTargetObjectFile.cpp
|
||||
AMDGPUIntrinsicInfo.cpp
|
||||
|
8
test/CodeGen/AMDGPU/amdgpu-codegenprepare.ll
Normal file
8
test/CodeGen/AMDGPU/amdgpu-codegenprepare.ll
Normal file
@ -0,0 +1,8 @@
|
||||
; RUN: opt -S -mtriple=amdgcn-- -amdgpu-codegenprepare < %s | FileCheck %s
|
||||
; RUN: opt -S -amdgpu-codegenprepare < %s
|
||||
; Make sure this doesn't crash with no triple
|
||||
|
||||
; CHECK-LABEL: @foo(
|
||||
define void @foo() {
|
||||
ret void
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user