Skip to content
This repository has been archived by the owner on Apr 23, 2020. It is now read-only.

Commit

Permalink
AMDGPU: Add stub custom CodeGenPrepare pass
Browse files Browse the repository at this point in the history
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
  • Loading branch information
arsenm committed Jun 24, 2016
1 parent a606472 commit 11c2d4b
Show file tree
Hide file tree
Showing 5 changed files with 96 additions and 0 deletions.
4 changes: 4 additions & 0 deletions lib/Target/AMDGPU/AMDGPU.h
Expand Up @@ -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);

Expand Down Expand Up @@ -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;

Expand Down
82 changes: 82 additions & 0 deletions lib/Target/AMDGPU/AMDGPUCodeGenPrepare.cpp
@@ -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);
}
1 change: 1 addition & 0 deletions lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
Expand Up @@ -60,6 +60,7 @@ extern "C" void LLVMInitializeAMDGPUTarget() {
initializeAMDGPUAnnotateKernelFeaturesPass(*PR);
initializeAMDGPUAnnotateUniformValuesPass(*PR);
initializeAMDGPUPromoteAllocaPass(*PR);
initializeAMDGPUCodeGenPreparePass(*PR);
initializeSIAnnotateControlFlowPass(*PR);
initializeSIDebuggerInsertNopsPass(*PR);
initializeSIInsertWaitsPass(*PR);
Expand Down
1 change: 1 addition & 0 deletions lib/Target/AMDGPU/CMakeLists.txt
Expand Up @@ -33,6 +33,7 @@ add_llvm_target(AMDGPUCodeGen
AMDGPUAnnotateKernelFeatures.cpp
AMDGPUAnnotateUniformValues.cpp
AMDGPUAsmPrinter.cpp
AMDGPUCodeGenPrepare.cpp
AMDGPUFrameLowering.cpp
AMDGPUTargetObjectFile.cpp
AMDGPUIntrinsicInfo.cpp
Expand Down
8 changes: 8 additions & 0 deletions test/CodeGen/AMDGPU/amdgpu-codegenprepare.ll
@@ -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
}

0 comments on commit 11c2d4b

Please sign in to comment.