[llvm-commits] [llvm] r129538 - in /llvm/trunk: lib/Transforms/Scalar/JumpThreading.cpp test/Transforms/JumpThreading/2011-04-14-InfLoop.ll

Duncan Sands baldrick at free.fr
Thu Apr 14 23:43:59 PDT 2011


Hi Owen,

> +  // Run constant folding to see if we can reduce the condition to a simple
> +  // constant.
> +  if (Instruction *I = dyn_cast<Instruction>(Condition)) {
> +    Value *SimpleVal = ConstantFoldInstruction(I, TD);

would it be advantageous to call SimplifyInstruction here: it does constant
folding and more.

Ciao, Duncan.

> +    if (SimpleVal) {
> +      I->replaceAllUsesWith(SimpleVal);
> +      I->eraseFromParent();
> +      Condition = SimpleVal;
> +    }
> +  }
> +
>     // If the terminator is branching on an undef, we can pick any of the
>     // successors to branch to.  Let GetBestDestForJumpOnUndef decide.
>     if (isa<UndefValue>(Condition)) {
>
> Added: llvm/trunk/test/Transforms/JumpThreading/2011-04-14-InfLoop.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/JumpThreading/2011-04-14-InfLoop.ll?rev=129538&view=auto
> ==============================================================================
> --- llvm/trunk/test/Transforms/JumpThreading/2011-04-14-InfLoop.ll (added)
> +++ llvm/trunk/test/Transforms/JumpThreading/2011-04-14-InfLoop.ll Thu Apr 14 16:35:50 2011
> @@ -0,0 +1,31 @@
> +; RUN: opt -jump-threading<  %s
> +;<rdar://problem/9284786>
> +
> +%0 = type<{ i64, i16, i64, i8, i8 }>
> +
> + at g_338 = external global %0, align 8
> +
> +define void @func_1() nounwind ssp {
> +entry:
> +  ret void
> +
> +for.cond1177:
> +  %inc1187 = add nsw i32 0, 1
> +  %cmp1179 = icmp slt i32 %inc1187, 5
> +  br i1 %cmp1179, label %for.cond1177, label %land.rhs1320
> +
> +land.rhs1320:
> +  %tmp1324 = volatile load i64* getelementptr inbounds (%0* @g_338, i64 0, i32 2), align 1, !tbaa !0
> +  br label %if.end.i
> +
> +if.end.i:
> +  %tobool.pr.i = phi i1 [ false, %if.end.i ], [ false, %land.rhs1320 ]
> +  br i1 %tobool.pr.i, label %return, label %if.end.i
> +
> +return:
> +  ret void
> +}
> +
> +!0 = metadata !{metadata !"long long", metadata !1}
> +!1 = metadata !{metadata !"omnipotent char", metadata !2}
> +!2 = metadata !{metadata !"Simple C/C++ TBAA", null}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list