xref: /llvm-project/llvm/test/CodeGen/AArch64/128bit_load_store.ll (revision 5ddce70ef0e5a641d7fea95e31fc5e2439cb98cb)
1; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=neon | FileCheck %s
2
3define void @test_store_f128(ptr %ptr, fp128 %val) #0 {
4; CHECK-LABEL: test_store_f128
5; CHECK: str	 {{q[0-9]+}}, [{{x[0-9]+}}]
6entry:
7  store fp128 %val, ptr %ptr, align 16
8  ret void
9}
10
11define fp128 @test_load_f128(ptr readonly %ptr) #2 {
12; CHECK-LABEL: test_load_f128
13; CHECK: ldr	 {{q[0-9]+}}, [{{x[0-9]+}}]
14entry:
15  %0 = load fp128, ptr %ptr, align 16
16  ret fp128 %0
17}
18
19define void @test_vstrq_p128(ptr %ptr, i128 %val) #0 {
20; CHECK-LABEL: test_vstrq_p128
21; CHECK: stp {{x[0-9]+}}, {{x[0-9]+}}, [{{x[0-9]+}}]
22
23entry:
24  %0 = bitcast i128 %val to fp128
25  store fp128 %0, ptr %ptr, align 16
26  ret void
27}
28
29define i128 @test_vldrq_p128(ptr readonly %ptr) #2 {
30; CHECK-LABEL: test_vldrq_p128
31; CHECK: ldp {{x[0-9]+}}, {{x[0-9]+}}, [{{x[0-9]+}}]
32
33entry:
34  %0 = load fp128, ptr %ptr, align 16
35  %1 = bitcast fp128 %0 to i128
36  ret i128 %1
37}
38
39define void @test_ld_st_p128(ptr nocapture %ptr) #0 {
40; CHECK-LABEL: test_ld_st_p128
41; CHECK: ldr {{q[0-9]+}}, [{{x[0-9]+}}]
42; CHECK-NEXT: str	{{q[0-9]+}}, [{{x[0-9]+}}, #16]
43entry:
44  %0 = load fp128, ptr %ptr, align 16
45  %add.ptr = getelementptr inbounds i128, ptr %ptr, i64 1
46  store fp128 %0, ptr %add.ptr, align 16
47  ret void
48}
49
50