Add testcase for PR11107.
[oota-llvm.git] / test / CodeGen / ARM / thumb2-it-block.ll
1 ; RUN: llc < %s -mtriple thumbv7-apple-ios5.0.0 | FileCheck %s
2 ; PR11107
3
4 %struct.huffcodetab = type { i32, i32, i32*, i8* }
5
6 @ht = external global [34 x %struct.huffcodetab]
7
8 define i32 @func(i32 %table_select, i32 %x, i32 %y, i32* %code) nounwind {
9 entry:
10 ; CHECK:      BB#0:
11 ; CHECK:        movs.w
12 ; CHECK-NEXT:   it    mi
13 ; CHECK-NEXT:   rsbmi
14 ; CHECK-NEXT:   movs.w
15 ; CHECK-NEXT:   it    mi
16 ; CHECK-NEXT:   rsbmi
17   %cmp.i = icmp sgt i32 %x, 0
18   %mul.i = sub i32 0, %x
19   %mul.i6 = select i1 %cmp.i, i32 %x, i32 %mul.i
20   %tmp = select i1 %cmp.i, i32 0, i32 1
21   %cmp.i1 = icmp sgt i32 %y, 0
22   %mul.i3 = sub i32 0, %y
23   %mul.i38 = select i1 %cmp.i1, i32 %y, i32 %mul.i3
24   br label %if.then3
25
26 if.then3:                                         ; preds = %if.end
27   %xlen = getelementptr inbounds [34 x %struct.huffcodetab]* @ht, i32 0, i32 %table_select, i32 0
28   %tmp2 = load i32* %xlen, align 4, !tbaa !0
29   %sub = add nsw i32 %mul.i6, -15
30   %cmp4 = icmp sgt i32 %mul.i6, 14
31   %mul.i7 = select i1 %cmp4, i32 15, i32 %mul.i6
32   %sub9 = add nsw i32 %mul.i38, -15
33   %cmp7 = icmp sgt i32 %mul.i38, 14
34   %mul.i39 = select i1 %cmp7, i32 15, i32 %mul.i38
35   %mul = shl nsw i32 %mul.i7, 4
36   %add = add nsw i32 %mul, %mul.i39
37   %table = getelementptr inbounds [34 x %struct.huffcodetab]* @ht, i32 0, i32 %table_select, i32 2
38   %tmp3 = load i32** %table, align 4, !tbaa !3
39   %arrayidx11 = getelementptr inbounds i32* %tmp3, i32 %add
40   %tmp4 = load i32* %arrayidx11, align 4, !tbaa !4
41   store i32 %tmp4, i32* %code, align 4, !tbaa !0
42   ret i32 42
43 }
44
45 !0 = metadata !{metadata !"int", metadata !1}
46 !1 = metadata !{metadata !"omnipotent char", metadata !2}
47 !2 = metadata !{metadata !"Simple C/C++ TBAA", null}
48 !3 = metadata !{metadata !"any pointer", metadata !1}
49 !4 = metadata !{metadata !"long", metadata !1}