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
|
||||
NVPTXSubtarget.cpp
|
||||
NVPTXTargetMachine.cpp
|
||||
NVPTXSplitBBatBar.cpp
|
||||
NVPTXLowerAggrCopies.cpp
|
||||
NVPTXutil.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 "NVPTXAllocaHoisting.h"
|
||||
#include "NVPTXLowerAggrCopies.h"
|
||||
#include "NVPTXSplitBBatBar.h"
|
||||
#include "llvm/ADT/OwningPtr.h"
|
||||
#include "llvm/Analysis/Passes.h"
|
||||
#include "llvm/CodeGen/AsmPrinter.h"
|
||||
|
@ -145,7 +144,6 @@ void NVPTXPassConfig::addIRPasses() {
|
|||
|
||||
bool NVPTXPassConfig::addInstSelector() {
|
||||
addPass(createLowerAggrCopies());
|
||||
addPass(createSplitBBatBarPass());
|
||||
addPass(createAllocaHoisting());
|
||||
addPass(createNVPTXISelDag(getNVPTXTargetMachine(), getOptLevel()));
|
||||
return false;
|
||||
|
|
Loading…
Reference in New Issue