Index: llvm/trunk/lib/CodeGen/CodeGenPrepare.cpp =================================================================== --- llvm/trunk/lib/CodeGen/CodeGenPrepare.cpp +++ llvm/trunk/lib/CodeGen/CodeGenPrepare.cpp @@ -436,11 +436,6 @@ bool MadeChange = true; while (MadeChange) { MadeChange = false; - SeenChainsForSExt.clear(); - ValToSExtendedUses.clear(); - RemovedInsts.clear(); - LargeOffsetGEPMap.clear(); - LargeOffsetGEPID.clear(); for (Function::iterator I = F.begin(); I != F.end(); ) { BasicBlock *BB = &*I++; bool ModifiedDTOnIteration = false; @@ -460,6 +455,11 @@ I->deleteValue(); EverMadeChange |= MadeChange; + SeenChainsForSExt.clear(); + ValToSExtendedUses.clear(); + RemovedInsts.clear(); + LargeOffsetGEPMap.clear(); + LargeOffsetGEPID.clear(); } SunkAddrs.clear(); Index: llvm/trunk/test/CodeGen/Thumb2/unreachable-large-offset-gep.ll =================================================================== --- llvm/trunk/test/CodeGen/Thumb2/unreachable-large-offset-gep.ll +++ llvm/trunk/test/CodeGen/Thumb2/unreachable-large-offset-gep.ll @@ -0,0 +1,22 @@ +; RUN: llc -o - %s | FileCheck %s + +; CHECK: .LBB0_1: +; CHECK: b .LBB0_1 + +target triple = "thumbv8m-unknown-linux-android" + +define void @d(i32* %c) { +entry: + br i1 false, label %f.exit, label %i.d + +i.d: + br label %i.d + +f.exit: + %0 = getelementptr i32, i32* %c, i32 57 + br label %if.g + +if.g: + store i32 0, i32* %0 + ret void +}