forked from OSchip/llvm-project
Removes the NVPTXSplitBBatBar pass.
This pass is a historic remnant and actually causes less efficient code to be generated in some cases. llvm-svn: 204620
This commit is contained in:
parent
5f1000107d
commit
6de2087ea7
|
@ -16,7 +16,6 @@ set(NVPTXCodeGen_sources
|
||||||
NVPTXRegisterInfo.cpp
|
NVPTXRegisterInfo.cpp
|
||||||
NVPTXSubtarget.cpp
|
NVPTXSubtarget.cpp
|
||||||
NVPTXTargetMachine.cpp
|
NVPTXTargetMachine.cpp
|
||||||
NVPTXSplitBBatBar.cpp
|
|
||||||
NVPTXLowerAggrCopies.cpp
|
NVPTXLowerAggrCopies.cpp
|
||||||
NVPTXutil.cpp
|
NVPTXutil.cpp
|
||||||
NVPTXAllocaHoisting.cpp
|
NVPTXAllocaHoisting.cpp
|
||||||
|
|
|
@ -1,73 +0,0 @@
|
||||||
//===- NVPTXSplitBBatBar.cpp - Split BB at Barrier --*- C++ -*--===//
|
|
||||||
//
|
|
||||||
// The LLVM Compiler Infrastructure
|
|
||||||
//
|
|
||||||
// This file is distributed under the University of Illinois Open Source
|
|
||||||
// License. See LICENSE.TXT for details.
|
|
||||||
//
|
|
||||||
//===----------------------------------------------------------------------===//
|
|
||||||
// Split basic blocks so that a basic block that contains a barrier instruction
|
|
||||||
// only contains the barrier instruction.
|
|
||||||
//
|
|
||||||
//===----------------------------------------------------------------------===//
|
|
||||||
|
|
||||||
#include "NVPTXSplitBBatBar.h"
|
|
||||||
#include "NVPTXUtilities.h"
|
|
||||||
#include "llvm/IR/Function.h"
|
|
||||||
#include "llvm/IR/InstIterator.h"
|
|
||||||
#include "llvm/IR/Instructions.h"
|
|
||||||
#include "llvm/IR/IntrinsicInst.h"
|
|
||||||
#include "llvm/IR/Intrinsics.h"
|
|
||||||
|
|
||||||
using namespace llvm;
|
|
||||||
|
|
||||||
namespace llvm { FunctionPass *createSplitBBatBarPass(); }
|
|
||||||
|
|
||||||
char NVPTXSplitBBatBar::ID = 0;
|
|
||||||
|
|
||||||
bool NVPTXSplitBBatBar::runOnFunction(Function &F) {
|
|
||||||
|
|
||||||
SmallVector<Instruction *, 4> SplitPoints;
|
|
||||||
bool changed = false;
|
|
||||||
|
|
||||||
// Collect all the split points in SplitPoints
|
|
||||||
for (Function::iterator BI = F.begin(), BE = F.end(); BI != BE; ++BI) {
|
|
||||||
BasicBlock::iterator IB = BI->begin();
|
|
||||||
BasicBlock::iterator II = IB;
|
|
||||||
BasicBlock::iterator IE = BI->end();
|
|
||||||
|
|
||||||
// Skit the first instruction. No splitting is needed at this
|
|
||||||
// point even if this is a bar.
|
|
||||||
while (II != IE) {
|
|
||||||
if (IntrinsicInst *inst = dyn_cast<IntrinsicInst>(II)) {
|
|
||||||
Intrinsic::ID id = inst->getIntrinsicID();
|
|
||||||
// If this is a barrier, split at this instruction
|
|
||||||
// and the next instruction.
|
|
||||||
if (llvm::isBarrierIntrinsic(id)) {
|
|
||||||
if (II != IB)
|
|
||||||
SplitPoints.push_back(II);
|
|
||||||
II++;
|
|
||||||
if ((II != IE) && (!II->isTerminator())) {
|
|
||||||
SplitPoints.push_back(II);
|
|
||||||
II++;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
II++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (unsigned i = 0; i != SplitPoints.size(); i++) {
|
|
||||||
changed = true;
|
|
||||||
Instruction *inst = SplitPoints[i];
|
|
||||||
inst->getParent()->splitBasicBlock(inst, "bar_split");
|
|
||||||
}
|
|
||||||
|
|
||||||
return changed;
|
|
||||||
}
|
|
||||||
|
|
||||||
// This interface will most likely not be necessary, because this pass will
|
|
||||||
// not be invoked by the driver, but will be used as a prerequisite to
|
|
||||||
// another pass.
|
|
||||||
FunctionPass *llvm::createSplitBBatBarPass() { return new NVPTXSplitBBatBar(); }
|
|
|
@ -1,42 +0,0 @@
|
||||||
//===-- llvm/lib/Target/NVPTX/NVPTXSplitBBatBar.h ---------------*- C++ -*-===//
|
|
||||||
//
|
|
||||||
// The LLVM Compiler Infrastructure
|
|
||||||
//
|
|
||||||
// This file is distributed under the University of Illinois Open Source
|
|
||||||
// License. See LICENSE.TXT for details.
|
|
||||||
//
|
|
||||||
//===----------------------------------------------------------------------===//
|
|
||||||
//
|
|
||||||
// This file contains the declaration of the NVIDIA specific declarations
|
|
||||||
// for splitting basic blocks at barrier instructions.
|
|
||||||
//
|
|
||||||
//===----------------------------------------------------------------------===//
|
|
||||||
|
|
||||||
#ifndef NVPTX_SPLIT_BB_AT_BAR_H
|
|
||||||
#define NVPTX_SPLIT_BB_AT_BAR_H
|
|
||||||
|
|
||||||
#include "llvm/CodeGen/MachineFunctionAnalysis.h"
|
|
||||||
#include "llvm/Pass.h"
|
|
||||||
|
|
||||||
namespace llvm {
|
|
||||||
|
|
||||||
// actual analysis class, which is a functionpass
|
|
||||||
struct NVPTXSplitBBatBar : public FunctionPass {
|
|
||||||
static char ID;
|
|
||||||
|
|
||||||
NVPTXSplitBBatBar() : FunctionPass(ID) {}
|
|
||||||
void getAnalysisUsage(AnalysisUsage &AU) const {
|
|
||||||
AU.addPreserved("stack-protector");
|
|
||||||
AU.addPreserved<MachineFunctionAnalysis>();
|
|
||||||
}
|
|
||||||
virtual bool runOnFunction(Function &F);
|
|
||||||
|
|
||||||
virtual const char *getPassName() const {
|
|
||||||
return "Split basic blocks at barrier";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
extern FunctionPass *createSplitBBatBarPass();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif //NVPTX_SPLIT_BB_AT_BAR_H
|
|
|
@ -16,7 +16,6 @@
|
||||||
#include "NVPTX.h"
|
#include "NVPTX.h"
|
||||||
#include "NVPTXAllocaHoisting.h"
|
#include "NVPTXAllocaHoisting.h"
|
||||||
#include "NVPTXLowerAggrCopies.h"
|
#include "NVPTXLowerAggrCopies.h"
|
||||||
#include "NVPTXSplitBBatBar.h"
|
|
||||||
#include "llvm/ADT/OwningPtr.h"
|
#include "llvm/ADT/OwningPtr.h"
|
||||||
#include "llvm/Analysis/Passes.h"
|
#include "llvm/Analysis/Passes.h"
|
||||||
#include "llvm/CodeGen/AsmPrinter.h"
|
#include "llvm/CodeGen/AsmPrinter.h"
|
||||||
|
@ -145,7 +144,6 @@ void NVPTXPassConfig::addIRPasses() {
|
||||||
|
|
||||||
bool NVPTXPassConfig::addInstSelector() {
|
bool NVPTXPassConfig::addInstSelector() {
|
||||||
addPass(createLowerAggrCopies());
|
addPass(createLowerAggrCopies());
|
||||||
addPass(createSplitBBatBarPass());
|
|
||||||
addPass(createAllocaHoisting());
|
addPass(createAllocaHoisting());
|
||||||
addPass(createNVPTXISelDag(getNVPTXTargetMachine(), getOptLevel()));
|
addPass(createNVPTXISelDag(getNVPTXTargetMachine(), getOptLevel()));
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in New Issue