@@ -93,3 +93,183 @@ define i64 @testuu0xf555f555f555f555() {
9393; CHECK-NEXT: ret
9494 ret i64 u0xf555f555f555f555
9595}
96+
97+ define void @test_store_0x1234567812345678 (ptr %x ) {
98+ ; CHECK-LABEL: test_store_0x1234567812345678:
99+ ; CHECK: // %bb.0:
100+ ; CHECK-NEXT: mov x8, #22136 // =0x5678
101+ ; CHECK-NEXT: movk x8, #4660, lsl #16
102+ ; CHECK-NEXT: stp w8, w8, [x0]
103+ ; CHECK-NEXT: ret
104+ store i64 u0x1234567812345678, ptr %x
105+ ret void
106+ }
107+
108+ define void @test_store_0xff3456ffff3456ff (ptr %x ) {
109+ ; CHECK-LABEL: test_store_0xff3456ffff3456ff:
110+ ; CHECK: // %bb.0:
111+ ; CHECK-NEXT: mov x8, #22271 // =0x56ff
112+ ; CHECK-NEXT: movk x8, #65332, lsl #16
113+ ; CHECK-NEXT: stp w8, w8, [x0]
114+ ; CHECK-NEXT: ret
115+ store i64 u0xff3456ffff3456ff, ptr %x
116+ ret void
117+ }
118+
119+ define void @test_store_0x00345600345600 (ptr %x ) {
120+ ; CHECK-LABEL: test_store_0x00345600345600:
121+ ; CHECK: // %bb.0:
122+ ; CHECK-NEXT: mov x8, #22016 // =0x5600
123+ ; CHECK-NEXT: movk x8, #52, lsl #16
124+ ; CHECK-NEXT: movk x8, #13398, lsl #32
125+ ; CHECK-NEXT: str x8, [x0]
126+ ; CHECK-NEXT: ret
127+ store i64 u0x00345600345600, ptr %x
128+ ret void
129+ }
130+
131+ define void @test_store_0x5555555555555555 (ptr %x ) {
132+ ; CHECK-LABEL: test_store_0x5555555555555555:
133+ ; CHECK: // %bb.0:
134+ ; CHECK-NEXT: mov x8, #6148914691236517205 // =0x5555555555555555
135+ ; CHECK-NEXT: str x8, [x0]
136+ ; CHECK-NEXT: ret
137+ store i64 u0x5555555555555555, ptr %x
138+ ret void
139+ }
140+
141+ define void @test_store_0x5055555550555555 (ptr %x ) {
142+ ; CHECK-LABEL: test_store_0x5055555550555555:
143+ ; CHECK: // %bb.0:
144+ ; CHECK-NEXT: mov x8, #6148914691236517205 // =0x5555555555555555
145+ ; CHECK-NEXT: and x8, x8, #0xf0fffffff0ffffff
146+ ; CHECK-NEXT: str x8, [x0]
147+ ; CHECK-NEXT: ret
148+ store i64 u0x5055555550555555, ptr %x
149+ ret void
150+ }
151+
152+ define void @test_store_0x0000555555555555 (ptr %x ) {
153+ ; CHECK-LABEL: test_store_0x0000555555555555:
154+ ; CHECK: // %bb.0:
155+ ; CHECK-NEXT: mov x8, #6148914691236517205 // =0x5555555555555555
156+ ; CHECK-NEXT: movk x8, #0, lsl #48
157+ ; CHECK-NEXT: str x8, [x0]
158+ ; CHECK-NEXT: ret
159+ store i64 u0x0000555555555555, ptr %x
160+ ret void
161+ }
162+
163+ define void @test_store_0x0000555500005555 (ptr %x ) {
164+ ; CHECK-LABEL: test_store_0x0000555500005555:
165+ ; CHECK: // %bb.0:
166+ ; CHECK-NEXT: mov x8, #21845 // =0x5555
167+ ; CHECK-NEXT: stp w8, w8, [x0]
168+ ; CHECK-NEXT: ret
169+ store i64 u0x0000555500005555, ptr %x
170+ ret void
171+ }
172+
173+ define void @test_store_0x5555000055550000 (ptr %x ) {
174+ ; CHECK-LABEL: test_store_0x5555000055550000:
175+ ; CHECK: // %bb.0:
176+ ; CHECK-NEXT: mov x8, #1431633920 // =0x55550000
177+ ; CHECK-NEXT: stp w8, w8, [x0]
178+ ; CHECK-NEXT: ret
179+ store i64 u0x5555000055550000, ptr %x
180+ ret void
181+ }
182+
183+ define void @test_store_u0xffff5555ffff5555 (ptr %x ) {
184+ ; CHECK-LABEL: test_store_u0xffff5555ffff5555:
185+ ; CHECK: // %bb.0:
186+ ; CHECK-NEXT: mov x8, #-43691 // =0xffffffffffff5555
187+ ; CHECK-NEXT: movk x8, #21845, lsl #32
188+ ; CHECK-NEXT: str x8, [x0]
189+ ; CHECK-NEXT: ret
190+ store i64 u0xffff5555ffff5555, ptr %x
191+ ret void
192+ }
193+
194+ define void @test_store_0x8888ffff8888ffff (ptr %x ) {
195+ ; CHECK-LABEL: test_store_0x8888ffff8888ffff:
196+ ; CHECK: // %bb.0:
197+ ; CHECK-NEXT: mov x8, #-2004287489 // =0xffffffff8888ffff
198+ ; CHECK-NEXT: movk x8, #34952, lsl #48
199+ ; CHECK-NEXT: str x8, [x0]
200+ ; CHECK-NEXT: ret
201+ store i64 u0x8888ffff8888ffff, ptr %x
202+ ret void
203+ }
204+
205+ define void @test_store_uu0xfffff555f555f555 (ptr %x ) {
206+ ; CHECK-LABEL: test_store_uu0xfffff555f555f555:
207+ ; CHECK: // %bb.0:
208+ ; CHECK-NEXT: mov x8, #-2731 // =0xfffffffffffff555
209+ ; CHECK-NEXT: movk x8, #62805, lsl #16
210+ ; CHECK-NEXT: movk x8, #62805, lsl #32
211+ ; CHECK-NEXT: str x8, [x0]
212+ ; CHECK-NEXT: ret
213+ store i64 u0xfffff555f555f555, ptr %x
214+ ret void
215+ }
216+
217+ define void @test_store_uu0xf555f555f555f555 (ptr %x ) {
218+ ; CHECK-LABEL: test_store_uu0xf555f555f555f555:
219+ ; CHECK: // %bb.0:
220+ ; CHECK-NEXT: mov x8, #6148914691236517205 // =0x5555555555555555
221+ ; CHECK-NEXT: orr x8, x8, #0xe001e001e001e001
222+ ; CHECK-NEXT: str x8, [x0]
223+ ; CHECK-NEXT: ret
224+ store i64 u0xf555f555f555f555, ptr %x
225+ ret void
226+ }
227+
228+ define void @test_store_0x1234567812345678_offset_range (ptr %x ) {
229+ ; CHECK-LABEL: test_store_0x1234567812345678_offset_range:
230+ ; CHECK: // %bb.0:
231+ ; CHECK-NEXT: mov x8, #22136 // =0x5678
232+ ; CHECK-NEXT: movk x8, #4660, lsl #16
233+ ; CHECK-NEXT: stp w8, w8, [x0, #32]
234+ ; CHECK-NEXT: ret
235+ %g = getelementptr i64 , ptr %x , i64 4
236+ store i64 u0x1234567812345678, ptr %g
237+ ret void
238+ }
239+
240+ define void @test_store_0x1234567812345678_offset_min (ptr %x ) {
241+ ; CHECK-LABEL: test_store_0x1234567812345678_offset_min:
242+ ; CHECK: // %bb.0:
243+ ; CHECK-NEXT: mov x8, #22136 // =0x5678
244+ ; CHECK-NEXT: movk x8, #4660, lsl #16
245+ ; CHECK-NEXT: stp w8, w8, [x0]
246+ ; CHECK-NEXT: ret
247+ %g = getelementptr i8 , ptr %x , i32 0
248+ store i64 u0x1234567812345678, ptr %g
249+ ret void
250+ }
251+
252+ define void @test_store_0x1234567812345678_offset_max (ptr %x ) {
253+ ; CHECK-LABEL: test_store_0x1234567812345678_offset_max:
254+ ; CHECK: // %bb.0:
255+ ; CHECK-NEXT: mov x8, #22136 // =0x5678
256+ ; CHECK-NEXT: movk x8, #4660, lsl #16
257+ ; CHECK-NEXT: stp w8, w8, [x0, #248]
258+ ; CHECK-NEXT: ret
259+ %g = getelementptr i8 , ptr %x , i32 248
260+ store i64 u0x1234567812345678, ptr %g
261+ ret void
262+ }
263+
264+ define void @test_store_0x1234567812345678_offset_max_over (ptr %x ) {
265+ ; CHECK-LABEL: test_store_0x1234567812345678_offset_max_over:
266+ ; CHECK: // %bb.0:
267+ ; CHECK-NEXT: mov x8, #22136 // =0x5678
268+ ; CHECK-NEXT: movk x8, #4660, lsl #16
269+ ; CHECK-NEXT: orr x8, x8, x8, lsl #32
270+ ; CHECK-NEXT: stur x8, [x0, #249]
271+ ; CHECK-NEXT: ret
272+ %g = getelementptr i8 , ptr %x , i32 249
273+ store i64 u0x1234567812345678, ptr %g
274+ ret void
275+ }
0 commit comments