From 0ab92619d076edc3e16117b1ff66f44d0123affa Mon Sep 17 00:00:00 2001 From: Jakob Stoklund Olesen Date: Sat, 30 Oct 2010 01:26:14 +0000 Subject: [PATCH] Add SkipPHIsAndLabels from PHIElimination to MachineBasicBlock. It is needed elsewhere. llvm-svn: 117763 --- include/llvm/CodeGen/MachineBasicBlock.h | 5 +++++ lib/CodeGen/MachineBasicBlock.cpp | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/include/llvm/CodeGen/MachineBasicBlock.h b/include/llvm/CodeGen/MachineBasicBlock.h index b0d77c55f25..49daf5f4d34 100644 --- a/include/llvm/CodeGen/MachineBasicBlock.h +++ b/include/llvm/CodeGen/MachineBasicBlock.h @@ -290,6 +290,11 @@ public: /// Returns end() is there's no non-PHI instruction. iterator getFirstNonPHI(); + /// SkipPHIsAndLabels - Return the first instruction in MBB after I that is + /// not a PHI or a label. This is the correct point to insert copies at the + /// beginning of a basic block. + iterator SkipPHIsAndLabels(iterator I); + /// getFirstTerminator - returns an iterator to the first terminator /// instruction of this basic block. If a terminator does not exist, /// it returns end() diff --git a/lib/CodeGen/MachineBasicBlock.cpp b/lib/CodeGen/MachineBasicBlock.cpp index 834c9ed0586..d4f901d7933 100644 --- a/lib/CodeGen/MachineBasicBlock.cpp +++ b/lib/CodeGen/MachineBasicBlock.cpp @@ -147,6 +147,13 @@ MachineBasicBlock::iterator MachineBasicBlock::getFirstNonPHI() { return I; } +MachineBasicBlock::iterator +MachineBasicBlock::SkipPHIsAndLabels(MachineBasicBlock::iterator I) { + while (I != end() && (I->isPHI() || I->isLabel() || I->isDebugValue())) + ++I; + return I; +} + MachineBasicBlock::iterator MachineBasicBlock::getFirstTerminator() { iterator I = end(); while (I != begin() && (--I)->getDesc().isTerminator())