[llvm-commits] [llvm] r142644 - /llvm/trunk/test/CodeGen/X86/block-placement.ll

Jim Grosbach grosbach at apple.com
Fri Oct 21 08:56:21 PDT 2011


Hey Chandler,

I think this test needs a target triple, not just -march. It's failing on Darwin with:

/Users/grosbaj/sources/llvm/test/CodeGen/X86/block-placement.ll:82:10: error: expected string not found in input
; CHECK: .align 16,
         ^
<stdin>:90:2: note: scanning from here
 xorl %eax, %eax
 ^
<stdin>:93:2: note: possible intended match here
 .align 4, 0x90

-Jim

On Oct 21, 2011, at 1:01 AM, Chandler Carruth wrote:

> Author: chandlerc
> Date: Fri Oct 21 03:01:56 2011
> New Revision: 142644
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=142644&view=rev
> Log:
> Add a very basic test for MachineBlockPlacement. This is essentially the
> canonical example I used when developing it, and is one of the primary
> motivating real-world use cases for __builtin_expect (when burried under
> a macro).
> 
> I'm working on more test cases here, but I'm trying to make sure both
> that the pass is doing the right thing with the test cases and that they
> aren't too brittle to changes elsewhere in the code generation pipeline.
> 
> Feedback and/or suggestions on how to test this are very welcome.
> Especially feedback on whether testing the block comments is a good
> strategy; I couldn't find any good examples to steal from but all the
> other ideas I had were a lot uglier or more fragile.
> 
> Added:
>    llvm/trunk/test/CodeGen/X86/block-placement.ll
> 
> Added: llvm/trunk/test/CodeGen/X86/block-placement.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/block-placement.ll?rev=142644&view=auto
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/block-placement.ll (added)
> +++ llvm/trunk/test/CodeGen/X86/block-placement.ll Fri Oct 21 03:01:56 2011
> @@ -0,0 +1,75 @@
> +; RUN: llc -march=x86 -enable-block-placement < %s | FileCheck %s
> +
> +declare void @error(i32 %i, i32 %a, i32 %b)
> +
> +define i32 @test1(i32 %i, i32* %a, i32 %b) {
> +; Test a chain of ifs, where the block guarded by the if is error handling code
> +; that is not expected to run.
> +; CHECK: test1:
> +; CHECK: %entry
> +; CHECK: %else1
> +; CHECK: %else2
> +; CHECK: %else3
> +; CHECK: %else4
> +; CHECK: %exit
> +; CHECK: %then1
> +; CHECK: %then2
> +; CHECK: %then3
> +; CHECK: %then4
> +; CHECK: %then5
> +
> +entry:
> +  %gep1 = getelementptr i32* %a, i32 1
> +  %val1 = load i32* %gep1
> +  %cond1 = icmp ugt i32 %val1, 1
> +  br i1 %cond1, label %then1, label %else1, !prof !0
> +
> +then1:
> +  call void @error(i32 %i, i32 1, i32 %b)
> +  br label %else1
> +
> +else1:
> +  %gep2 = getelementptr i32* %a, i32 2
> +  %val2 = load i32* %gep2
> +  %cond2 = icmp ugt i32 %val2, 2
> +  br i1 %cond2, label %then2, label %else2, !prof !0
> +
> +then2:
> +  call void @error(i32 %i, i32 1, i32 %b)
> +  br label %else2
> +
> +else2:
> +  %gep3 = getelementptr i32* %a, i32 3
> +  %val3 = load i32* %gep3
> +  %cond3 = icmp ugt i32 %val3, 3
> +  br i1 %cond3, label %then3, label %else3, !prof !0
> +
> +then3:
> +  call void @error(i32 %i, i32 1, i32 %b)
> +  br label %else3
> +
> +else3:
> +  %gep4 = getelementptr i32* %a, i32 4
> +  %val4 = load i32* %gep4
> +  %cond4 = icmp ugt i32 %val4, 4
> +  br i1 %cond4, label %then4, label %else4, !prof !0
> +
> +then4:
> +  call void @error(i32 %i, i32 1, i32 %b)
> +  br label %else4
> +
> +else4:
> +  %gep5 = getelementptr i32* %a, i32 3
> +  %val5 = load i32* %gep5
> +  %cond5 = icmp ugt i32 %val5, 3
> +  br i1 %cond5, label %then5, label %exit, !prof !0
> +
> +then5:
> +  call void @error(i32 %i, i32 1, i32 %b)
> +  br label %exit
> +
> +exit:
> +  ret i32 %b
> +}
> +
> +!0 = metadata !{metadata !"branch_weights", i32 4, i32 64}
> 
> 
> _______________________________________________
> 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