Bill Wendling | 26e8ca3 | 2011-10-11 00:26:57 +0000 | [diff] [blame] | 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} |