1 ; RUN: llc < %s -mtriple=arm64-eabi | FileCheck %s
3 ;==--------------------------------------------------------------------------==
4 ; Tests for MOV-immediate implemented with ORR-immediate.
5 ;==--------------------------------------------------------------------------==
7 ; 64-bit immed with 32-bit pattern size, rotated by 0.
8 define i64 @test64_32_rot0() nounwind {
9 ; CHECK-LABEL: test64_32_rot0:
10 ; CHECK: mov x0, #30064771079
14 ; 64-bit immed with 32-bit pattern size, rotated by 2.
15 define i64 @test64_32_rot2() nounwind {
16 ; CHECK-LABEL: test64_32_rot2:
17 ; CHECK: mov x0, #-4611686002321260541
18 ret i64 13835058071388291075
21 ; 64-bit immed with 4-bit pattern size, rotated by 3.
22 define i64 @test64_4_rot3() nounwind {
23 ; CHECK-LABEL: test64_4_rot3:
24 ; CHECK: mov x0, #-1229782938247303442
25 ret i64 17216961135462248174
28 ; 32-bit immed with 32-bit pattern size, rotated by 16.
29 define i32 @test32_32_rot16() nounwind {
30 ; CHECK-LABEL: test32_32_rot16:
31 ; CHECK: orr w0, wzr, #0xff0000
35 ; 32-bit immed with 2-bit pattern size, rotated by 1.
36 define i32 @test32_2_rot1() nounwind {
37 ; CHECK-LABEL: test32_2_rot1:
38 ; CHECK: mov w0, #-1431655766
42 ;==--------------------------------------------------------------------------==
43 ; Tests for MOVZ with MOVK.
44 ;==--------------------------------------------------------------------------==
46 define i32 @movz() nounwind {
52 define i64 @movz_3movk() nounwind {
53 ; CHECK-LABEL: movz_3movk:
54 ; CHECK: mov x0, #22136
55 ; CHECK-NEXT: movk x0, #43981, lsl #16
56 ; CHECK-NEXT: movk x0, #4660, lsl #32
57 ; CHECK-NEXT: movk x0, #5, lsl #48
58 ret i64 1427392313513592
61 define i64 @movz_movk_skip1() nounwind {
62 ; CHECK-LABEL: movz_movk_skip1:
63 ; CHECK: mov x0, #1126236160
64 ; CHECK-NEXT: movk x0, #5, lsl #32
68 define i64 @movz_skip1_movk() nounwind {
69 ; CHECK-LABEL: movz_skip1_movk:
70 ; CHECK: mov x0, #4660
71 ; CHECK-NEXT: movk x0, #34388, lsl #32
72 ret i64 147695335379508
75 ;==--------------------------------------------------------------------------==
76 ; Tests for MOVN with MOVK.
77 ;==--------------------------------------------------------------------------==
79 define i64 @movn() nounwind {
85 define i64 @movn_skip1_movk() nounwind {
86 ; CHECK-LABEL: movn_skip1_movk:
87 ; CHECK: mov x0, #-60876
88 ; CHECK-NEXT: movk x0, #65494, lsl #32
92 ;==--------------------------------------------------------------------------==
93 ; Tests for ORR with MOVK.
94 ;==--------------------------------------------------------------------------==
97 define i64 @orr_movk1() nounwind {
98 ; CHECK-LABEL: orr_movk1:
99 ; CHECK: mov x0, #72056494543077120
100 ; CHECK: movk x0, #57005, lsl #16
101 ret i64 72056498262245120
104 define i64 @orr_movk2() nounwind {
105 ; CHECK-LABEL: orr_movk2:
106 ; CHECK: mov x0, #72056494543077120
107 ; CHECK: movk x0, #57005, lsl #48
108 ret i64 -2400982650836746496
111 define i64 @orr_movk3() nounwind {
112 ; CHECK-LABEL: orr_movk3:
113 ; CHECK: mov x0, #72056494543077120
114 ; CHECK: movk x0, #57005, lsl #32
115 ret i64 72020953688702720
118 define i64 @orr_movk4() nounwind {
119 ; CHECK-LABEL: orr_movk4:
120 ; CHECK: mov x0, #72056494543077120
121 ; CHECK: movk x0, #57005
122 ret i64 72056494543068845
126 define i64 @orr_movk5() nounwind {
127 ; CHECK-LABEL: orr_movk5:
128 ; CHECK: mov x0, #-71777214294589696
129 ; CHECK: movk x0, #57005, lsl #16
130 ret i64 -71777214836900096
133 define i64 @orr_movk6() nounwind {
134 ; CHECK-LABEL: orr_movk6:
135 ; CHECK: mov x0, #-71777214294589696
136 ; CHECK: movk x0, #57005, lsl #16
137 ; CHECK: movk x0, #57005, lsl #48
138 ret i64 -2400982647117578496
141 define i64 @orr_movk7() nounwind {
142 ; CHECK-LABEL: orr_movk7:
143 ; CHECK: mov x0, #-71777214294589696
144 ; CHECK: movk x0, #57005, lsl #48
145 ret i64 -2400982646575268096
148 define i64 @orr_movk8() nounwind {
149 ; CHECK-LABEL: orr_movk8:
150 ; CHECK: mov x0, #-71777214294589696
151 ; CHECK: movk x0, #57005
152 ; CHECK: movk x0, #57005, lsl #48
153 ret i64 -2400982646575276371
157 define i64 @orr_movk9() nounwind {
158 ; CHECK-LABEL: orr_movk9:
159 ; CHECK: mov x0, #1152921435887370240
160 ; CHECK: movk x0, #65280
161 ; CHECK: movk x0, #57005, lsl #16
162 ret i64 1152921439623315200
165 define i64 @orr_movk10() nounwind {
166 ; CHECK-LABEL: orr_movk10:
167 ; CHECK: mov x0, #1152921504606846720
168 ; CHECK: movk x0, #57005, lsl #16
169 ret i64 1152921504047824640
172 define i64 @orr_movk11() nounwind {
173 ; CHECK-LABEL: orr_movk11:
174 ; CHECK: mov x0, #-4503599627370241
175 ; CHECK: movk x0, #57005, lsl #16
176 ; CHECK: movk x0, #65535, lsl #32
177 ret i64 -4222125209747201
180 define i64 @orr_movk12() nounwind {
181 ; CHECK-LABEL: orr_movk12:
182 ; CHECK: mov x0, #-4503599627370241
183 ; CHECK: movk x0, #57005, lsl #32
184 ret i64 -4258765016661761
187 define i64 @orr_movk13() nounwind {
188 ; CHECK-LABEL: orr_movk13:
189 ; CHECK: mov x0, #17592169267200
190 ; CHECK: movk x0, #57005
191 ; CHECK: movk x0, #57005, lsl #48
192 ret i64 -2401245434149282131
196 define i64 @g() nounwind {
199 ; CHECK: movk x0, #65535, lsl #48
201 ret i64 -281474976710654