diff --git a/lib/Target/NVPTX/CMakeLists.txt b/lib/Target/NVPTX/CMakeLists.txt index 8d25077a87e..20612b3ff5c 100644 --- a/lib/Target/NVPTX/CMakeLists.txt +++ b/lib/Target/NVPTX/CMakeLists.txt @@ -16,7 +16,6 @@ set(NVPTXCodeGen_sources NVPTXRegisterInfo.cpp NVPTXSubtarget.cpp NVPTXTargetMachine.cpp - NVPTXSplitBBatBar.cpp NVPTXLowerAggrCopies.cpp NVPTXutil.cpp NVPTXAllocaHoisting.cpp diff --git a/lib/Target/NVPTX/NVPTXSplitBBatBar.cpp b/lib/Target/NVPTX/NVPTXSplitBBatBar.cpp deleted file mode 100644 index d4a778ca11e..00000000000 --- a/lib/Target/NVPTX/NVPTXSplitBBatBar.cpp +++ /dev/null @@ -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 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(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(); } diff --git a/lib/Target/NVPTX/NVPTXSplitBBatBar.h b/lib/Target/NVPTX/NVPTXSplitBBatBar.h deleted file mode 100644 index 03391feb3b4..00000000000 --- a/lib/Target/NVPTX/NVPTXSplitBBatBar.h +++ /dev/null @@ -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(); - } - 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 diff --git a/lib/Target/NVPTX/NVPTXTargetMachine.cpp b/lib/Target/NVPTX/NVPTXTargetMachine.cpp index 5ab8cea48fd..c0009fa9432 100644 --- a/lib/Target/NVPTX/NVPTXTargetMachine.cpp +++ b/lib/Target/NVPTX/NVPTXTargetMachine.cpp @@ -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;