| Index: src/IceTargetLowering.cpp | 
| diff --git a/src/IceTargetLowering.cpp b/src/IceTargetLowering.cpp | 
| index 2a9b8c431ac6fbd42cabba5f8bfb9384017829bb..0034de5f7ca3e2340eb15e52f23530dfafc8ca56 100644 | 
| --- a/src/IceTargetLowering.cpp | 
| +++ b/src/IceTargetLowering.cpp | 
| @@ -26,11 +26,12 @@ namespace Ice { | 
|  | 
| void LoweringContext::init(CfgNode *N) { | 
| Node = N; | 
| -  Cur = getNode()->getInsts().begin(); | 
| +  Begin = getNode()->getInsts().begin(); | 
| +  Cur = Begin; | 
| End = getNode()->getInsts().end(); | 
| skipDeleted(Cur); | 
| Next = Cur; | 
| -  advance(Next); | 
| +  advanceForward(Next); | 
| } | 
|  | 
| void LoweringContext::insert(Inst *Inst) { | 
| @@ -43,13 +44,26 @@ void LoweringContext::skipDeleted(InstList::iterator &I) const { | 
| ++I; | 
| } | 
|  | 
| -void LoweringContext::advance(InstList::iterator &I) const { | 
| +void LoweringContext::advanceForward(InstList::iterator &I) const { | 
| if (I != End) { | 
| ++I; | 
| skipDeleted(I); | 
| } | 
| } | 
|  | 
| +void LoweringContext::advanceBackward(InstList::iterator &I) const { | 
| +  assert(I != Begin); | 
| +  do { | 
| +    --I; | 
| +  } while (I != Begin && (*I)->isDeleted()); | 
| +} | 
| + | 
| +Inst *LoweringContext::getLastInserted() const { | 
| +  InstList::iterator Cursor = Next; | 
| +  advanceBackward(Cursor); | 
| +  return *Cursor; | 
| +} | 
| + | 
| TargetLowering *TargetLowering::createLowering(TargetArch Target, Cfg *Func) { | 
| // These statements can be #ifdef'd to specialize the code generator | 
| // to a subset of the available targets.  TODO: use CRTP. | 
|  |