Index: llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp =================================================================== --- llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp +++ llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp @@ -3265,12 +3265,12 @@ // requirements for both N and i at the same time. Limiting this code to // equality icmps is not a problem because all interesting loops use // equality icmps, thanks to IndVarSimplify. - if (ICmpInst *CI = dyn_cast(UserInst)) + if (ICmpInst *CI = dyn_cast(UserInst)) { + // If CI can be saved in some target, like replaced inside hardware loop + // in PowerPC, no need to generate initial formulae for it. + if (SaveCmp && CI == dyn_cast(ExitBranch->getCondition())) + continue; if (CI->isEquality()) { - // If CI can be saved in some target, like replaced inside hardware loop - // in PowerPC, no need to generate initial formulae for it. - if (SaveCmp && CI == dyn_cast(ExitBranch->getCondition())) - continue; // Swap the operands if needed to put the OperandValToReplace on the // left, for consistency. Value *NV = CI->getOperand(1); @@ -3298,6 +3298,7 @@ Factors.insert(-(uint64_t)Factors[i]); Factors.insert(-1); } + } // Get or create an LSRUse. std::pair P = getUse(S, Kind, AccessTy); Index: llvm/trunk/test/CodeGen/PowerPC/ctrloop-le.ll =================================================================== --- llvm/trunk/test/CodeGen/PowerPC/ctrloop-le.ll +++ llvm/trunk/test/CodeGen/PowerPC/ctrloop-le.ll @@ -2,9 +2,6 @@ target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v128:128:128-n32:64" target triple = "powerpc64-unknown-linux-gnu" -; XFAIL: * -; SE needs improvement - ; CHECK: test_pos1_ir_sle ; CHECK: bdnz ; a < b Index: llvm/trunk/test/CodeGen/PowerPC/ctrloop-lt.ll =================================================================== --- llvm/trunk/test/CodeGen/PowerPC/ctrloop-lt.ll +++ llvm/trunk/test/CodeGen/PowerPC/ctrloop-lt.ll @@ -2,9 +2,6 @@ target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v128:128:128-n32:64" target triple = "powerpc64-unknown-linux-gnu" -; XFAIL: * -; SE needs improvement - ; CHECK: test_pos1_ir_slt ; CHECK: bdnz ; a < b @@ -35,7 +32,6 @@ ; CHECK: test_pos2_ir_slt -; FIXME: Support this loop! ; CHECK: bdnz ; a < b define void @test_pos2_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind { @@ -65,7 +61,6 @@ ; CHECK: test_pos4_ir_slt -; FIXME: Support this loop! ; CHECK: bdnz ; a < b define void @test_pos4_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {