It's (currently) not safe to keep certain physical registers live across basic blocks...
[oota-llvm.git] / test / CodeGen / X86 / avoid-loop-align.ll
1 ; RUN: llvm-as < %s | llc -mtriple=i386-apple-darwin | grep align | count 1
2
3 @A = common global [100 x i32] zeroinitializer, align 32                ; <[100 x i32]*> [#uses=1]
4
5 define i8* @test(i8* %Q, i32* %L) nounwind {
6 entry:
7         %tmp = tail call i32 (...)* @foo() nounwind             ; <i32> [#uses=2]
8         %tmp1 = inttoptr i32 %tmp to i8*                ; <i8*> [#uses=1]
9         br label %bb1
10
11 bb:             ; preds = %bb1, %bb1
12         %indvar.next = add i32 %P.0.rec, 1              ; <i32> [#uses=1]
13         br label %bb1
14
15 bb1:            ; preds = %bb, %entry
16         %P.0.rec = phi i32 [ 0, %entry ], [ %indvar.next, %bb ]         ; <i32> [#uses=2]
17         %P.0 = getelementptr i8* %tmp1, i32 %P.0.rec            ; <i8*> [#uses=3]
18         %tmp2 = load i8* %P.0, align 1          ; <i8> [#uses=1]
19         switch i8 %tmp2, label %bb4 [
20                 i8 12, label %bb
21                 i8 42, label %bb
22         ]
23
24 bb4:            ; preds = %bb1
25         %tmp3 = ptrtoint i8* %P.0 to i32                ; <i32> [#uses=1]
26         %tmp4 = sub i32 %tmp3, %tmp             ; <i32> [#uses=1]
27         %tmp5 = getelementptr [100 x i32]* @A, i32 0, i32 %tmp4         ; <i32*> [#uses=1]
28         store i32 4, i32* %tmp5, align 4
29         ret i8* %P.0
30 }
31
32 declare i32 @foo(...)