[llvm-commits] [llvm] r164866 - in /llvm/trunk: lib/Transforms/Scalar/CodeGenPrepare.cpp test/CodeGen/X86/2012-09-28-CGPBug.ll

Rafael EspĂ­ndola rafael.espindola at gmail.com
Fri Oct 5 13:05:04 PDT 2012


Sorry, what was the problem? The indirectbr in the testcase can only
jump to label %17 and label %18, so it should be fine to remove the
other basic blocks.

On 28 September 2012 19:58, Evan Cheng <evan.cheng at apple.com> wrote:
> Author: evancheng
> Date: Fri Sep 28 18:58:57 2012
> New Revision: 164866
>
> URL: http://llvm.org/viewvc/llvm-project?rev=164866&view=rev
> Log:
> Do not delete BBs if their addresses are taken. rdar://12396696
>
> Added:
>     llvm/trunk/test/CodeGen/X86/2012-09-28-CGPBug.ll
> Modified:
>     llvm/trunk/lib/Transforms/Scalar/CodeGenPrepare.cpp
>
> Modified: llvm/trunk/lib/Transforms/Scalar/CodeGenPrepare.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/CodeGenPrepare.cpp?rev=164866&r1=164865&r2=164866&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Scalar/CodeGenPrepare.cpp (original)
> +++ llvm/trunk/lib/Transforms/Scalar/CodeGenPrepare.cpp Fri Sep 28 18:58:57 2012
> @@ -226,7 +226,8 @@
>      // edge, just collapse it.
>      BasicBlock *SinglePred = BB->getSinglePredecessor();
>
> -    if (!SinglePred || SinglePred == BB) continue;
> +    // Don't merge if BB's address is taken.
> +    if (!SinglePred || SinglePred == BB || BB->hasAddressTaken()) continue;
>
>      BranchInst *Term = dyn_cast<BranchInst>(SinglePred->getTerminator());
>      if (Term && !Term->isConditional()) {
> @@ -788,7 +789,7 @@
>    }
>
>    // If we eliminated all predecessors of the block, delete the block now.
> -  if (Changed && pred_begin(BB) == pred_end(BB))
> +  if (Changed && !BB->hasAddressTaken() && pred_begin(BB) == pred_end(BB))
>      BB->eraseFromParent();
>
>    return Changed;
>
> Added: llvm/trunk/test/CodeGen/X86/2012-09-28-CGPBug.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2012-09-28-CGPBug.ll?rev=164866&view=auto
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/2012-09-28-CGPBug.ll (added)
> +++ llvm/trunk/test/CodeGen/X86/2012-09-28-CGPBug.ll Fri Sep 28 18:58:57 2012
> @@ -0,0 +1,53 @@
> +; RUN: llc -mtriple=i386-apple-macosx < %s | FileCheck %s
> +; rdar://12396696
> +
> + at JT = global [4 x i32] [i32 sub (i32 ptrtoint (i8* blockaddress(@h, %18) to i32), i32 ptrtoint (i8* blockaddress(@h, %11) to i32)), i32 sub (i32 ptrtoint (i8* blockaddress(@h, %17) to i32), i32 ptrtoint (i8* blockaddress(@h, %11) to i32)), i32 sub (i32 ptrtoint (i8* blockaddress(@h, %22) to i32), i32 ptrtoint (i8* blockaddress(@h, %18) to i32)), i32 sub (i32 ptrtoint (i8* blockaddress(@h, %22) to i32), i32 ptrtoint (i8* blockaddress(@h, %17) to i32))]
> + at gGlobalLock = external global i8*
> + at .str40 = external global [35 x i8]
> +
> +; CHECK: _JT:
> +; CHECK-NOT: .long Ltmp{{[0-9]+}}-1
> +; CHECK-NOT: .long 1-Ltmp{{[0-9]+}}
> +; CHECK: .long Ltmp{{[0-9]+}}-Ltmp{{[0-9]+}}
> +; CHECK: .long Ltmp{{[0-9]+}}-Ltmp{{[0-9]+}}
> +; CHECK: .long Ltmp{{[0-9]+}}-Ltmp{{[0-9]+}}
> +; CHECK: .long Ltmp{{[0-9]+}}-Ltmp{{[0-9]+}}
> +
> +define void @h(i8*) nounwind ssp {
> +  %2 = alloca i8*
> +  store i8* %0, i8** %2
> +  %3 = load i8** %2
> +  %4 = bitcast i8* %3 to { i32, i32 }*
> +  %5 = getelementptr { i32, i32 }* %4, i32 0, i32 0
> +  %6 = load i32* %5
> +  %7 = srem i32 %6, 2
> +  %8 = icmp slt i32 %6, 2
> +  %9 = select i1 %8, i32 %6, i32 %7
> +  %10 = icmp eq i32 %9, 0
> +  br label %11
> +
> +; <label>:11                                      ; preds = %1
> +  %12 = zext i1 %10 to i32
> +  %13 = getelementptr [4 x i32]* @JT, i32 0, i32 %12
> +  %14 = load i32* %13
> +  %15 = add i32 %14, ptrtoint (i8* blockaddress(@h, %11) to i32)
> +  %16 = inttoptr i32 %15 to i8*
> +  indirectbr i8* %16, [label %17, label %18]
> +
> +; <label>:17                                      ; preds = %11
> +  tail call void (i8*, ...)* @g(i8* getelementptr inbounds ([35 x i8]* @.str40, i32 0, i32 0))
> +  br label %22
> +
> +; <label>:18                                      ; preds = %11
> +  %19 = call i32 @f(i32 -1037694186) nounwind
> +  %20 = inttoptr i32 %19 to i32 (i8**)*
> +  %21 = tail call i32 %20(i8** @gGlobalLock)
> +  br label %22
> +
> +; <label>:22                                      ; preds = %18, %17
> +  ret void
> +}
> +
> +declare i32 @f(i32)
> +
> +declare void @g(i8*, ...)
>
>
> _______________________________________________
> 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