~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to test/CodeGen/ARM/pack.ll

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2015-07-15 17:51:08 UTC
  • Revision ID: package-import@ubuntu.com-20150715175108-l8mynwovkx4zx697
Tags: upstream-3.7~+rc2
ImportĀ upstreamĀ versionĀ 3.7~+rc2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
; RUN: llc -mtriple=arm-eabi -mattr=+v6 %s -o - | FileCheck %s
 
2
 
 
3
; CHECK: test1
 
4
; CHECK: pkhbt   r0, r0, r1, lsl #16
 
5
define i32 @test1(i32 %X, i32 %Y) {
 
6
        %tmp1 = and i32 %X, 65535
 
7
        %tmp4 = shl i32 %Y, 16
 
8
        %tmp5 = or i32 %tmp4, %tmp1
 
9
        ret i32 %tmp5
 
10
}
 
11
 
 
12
; CHECK: test2
 
13
; CHECK: pkhbt   r0, r0, r1, lsl #12
 
14
define i32 @test2(i32 %X, i32 %Y) {
 
15
        %tmp1 = and i32 %X, 65535
 
16
        %tmp3 = shl i32 %Y, 12
 
17
        %tmp4 = and i32 %tmp3, -65536
 
18
        %tmp57 = or i32 %tmp4, %tmp1
 
19
        ret i32 %tmp57
 
20
}
 
21
 
 
22
; CHECK: test3
 
23
; CHECK: pkhbt   r0, r0, r1, lsl #18
 
24
define i32 @test3(i32 %X, i32 %Y) {
 
25
        %tmp19 = and i32 %X, 65535
 
26
        %tmp37 = shl i32 %Y, 18
 
27
        %tmp5 = or i32 %tmp37, %tmp19
 
28
        ret i32 %tmp5
 
29
}
 
30
 
 
31
; CHECK: test4
 
32
; CHECK: pkhbt   r0, r0, r1
 
33
define i32 @test4(i32 %X, i32 %Y) {
 
34
        %tmp1 = and i32 %X, 65535
 
35
        %tmp3 = and i32 %Y, -65536
 
36
        %tmp46 = or i32 %tmp3, %tmp1
 
37
        ret i32 %tmp46
 
38
}
 
39
 
 
40
; CHECK: test5
 
41
; CHECK: pkhtb   r0, r0, r1, asr #16
 
42
define i32 @test5(i32 %X, i32 %Y) {
 
43
        %tmp17 = and i32 %X, -65536
 
44
        %tmp2 = bitcast i32 %Y to i32
 
45
        %tmp4 = lshr i32 %tmp2, 16
 
46
        %tmp5 = or i32 %tmp4, %tmp17
 
47
        ret i32 %tmp5
 
48
}
 
49
 
 
50
; CHECK: test5a
 
51
; CHECK: pkhtb   r0, r0, r1, asr #16
 
52
define i32 @test5a(i32 %X, i32 %Y) {
 
53
        %tmp110 = and i32 %X, -65536
 
54
        %tmp37 = lshr i32 %Y, 16
 
55
        %tmp39 = bitcast i32 %tmp37 to i32
 
56
        %tmp5 = or i32 %tmp39, %tmp110
 
57
        ret i32 %tmp5
 
58
}
 
59
 
 
60
; CHECK: test6
 
61
; CHECK: pkhtb   r0, r0, r1, asr #12
 
62
define i32 @test6(i32 %X, i32 %Y) {
 
63
        %tmp1 = and i32 %X, -65536
 
64
        %tmp37 = lshr i32 %Y, 12
 
65
        %tmp38 = bitcast i32 %tmp37 to i32
 
66
        %tmp4 = and i32 %tmp38, 65535
 
67
        %tmp59 = or i32 %tmp4, %tmp1
 
68
        ret i32 %tmp59
 
69
}
 
70
 
 
71
; CHECK: test7
 
72
; CHECK: pkhtb   r0, r0, r1, asr #18
 
73
define i32 @test7(i32 %X, i32 %Y) {
 
74
        %tmp1 = and i32 %X, -65536
 
75
        %tmp3 = ashr i32 %Y, 18
 
76
        %tmp4 = and i32 %tmp3, 65535
 
77
        %tmp57 = or i32 %tmp4, %tmp1
 
78
        ret i32 %tmp57
 
79
}
 
80
 
 
81
; Arithmetic and logic right shift does not have the same semantics if shifting
 
82
; by more than 16 in this context.
 
83
 
 
84
; CHECK: test8
 
85
; CHECK-NOT: pkhtb   r0, r0, r1, asr #22
 
86
define i32 @test8(i32 %X, i32 %Y) {
 
87
        %tmp1 = and i32 %X, -65536
 
88
        %tmp3 = lshr i32 %Y, 22
 
89
        %tmp57 = or i32 %tmp3, %tmp1
 
90
        ret i32 %tmp57
 
91
}
 
92
 
 
93
; CHECK-LABEL: test9:
 
94
; CHECK: pkhtb r0, r0, r1, asr #16
 
95
define i32 @test9(i32 %src1, i32 %src2) {
 
96
entry:
 
97
    %tmp = and i32 %src1, -65536
 
98
    %tmp2 = lshr i32 %src2, 16
 
99
    %tmp3 = or i32 %tmp, %tmp2
 
100
    ret i32 %tmp3
 
101
}
 
102
 
 
103
; CHECK-LABEL: test10:
 
104
; CHECK: pkhtb r0, r0, r1, asr #17
 
105
define i32 @test10(i32 %src1, i32 %src2) {
 
106
entry:
 
107
    %tmp = and i32 %src1, -65536
 
108
    %tmp2 = ashr i32 %src2, 17
 
109
    %tmp3 = or i32 %tmp, %tmp2
 
110
    ret i32 %tmp3
 
111
}