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:
Eli Bendersky 2014-03-24 16:36:39 +00:00
parent 5f1000107d
commit 6de2087ea7
4 changed files with 0 additions and 118 deletions

View File

@ -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

View File

@ -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(); }

View File

@ -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

View File

@ -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;