Index: llvm/trunk/lib/Target/ARM/Thumb2InstrInfo.cpp =================================================================== --- llvm/trunk/lib/Target/ARM/Thumb2InstrInfo.cpp +++ llvm/trunk/lib/Target/ARM/Thumb2InstrInfo.cpp @@ -489,7 +489,8 @@ Offset += MI.getOperand(FrameRegIdx+1).getImm(); unsigned PredReg; - if (Offset == 0 && getInstrPredicate(MI, PredReg) == ARMCC::AL) { + if (Offset == 0 && getInstrPredicate(MI, PredReg) == ARMCC::AL && + !MI.definesRegister(ARM::CPSR)) { // Turn it into a move. MI.setDesc(TII.get(ARM::tMOVr)); MI.getOperand(FrameRegIdx).ChangeToRegister(FrameReg, false); Index: llvm/trunk/test/CodeGen/Thumb2/cmp-frame.ll =================================================================== --- llvm/trunk/test/CodeGen/Thumb2/cmp-frame.ll +++ llvm/trunk/test/CodeGen/Thumb2/cmp-frame.ll @@ -0,0 +1,11 @@ +; RUN: llc < %s | FileCheck %s + +target triple = "thumbv7-linux-androideabi" + +define i1 @f() { + %a = alloca i8* + ; CHECK: adds.w r0, sp, #0 + ; CHECK: it ne + %cmp = icmp ne i8** %a, null + ret i1 %cmp +}