[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / i128_volatile_load_store.ll
blob73708e3fd8c44bfb9d89b0523cdc322b5e6594ba
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=aarch64 %s -o - | FileCheck %s
4 @x = common dso_local global i128 0
5 @y = common dso_local global i128 0
7 define void @test1() {
8 ; CHECK-LABEL: test1:
9 ; CHECK:       // %bb.0:
10 ; CHECK-NEXT:    adrp x8, x
11 ; CHECK-NEXT:    add x8, x8, :lo12:x
12 ; CHECK-NEXT:    adrp x10, y
13 ; CHECK-NEXT:    add x10, x10, :lo12:y
14 ; CHECK-NEXT:    ldp x8, x9, [x8]
15 ; CHECK-NEXT:    stp x8, x9, [x10]
16 ; CHECK-NEXT:    ret
17   %tmp = load volatile i128, ptr @x
18   store volatile i128 %tmp, ptr @y
19   ret void
22 define void @test2() {
23 ; CHECK-LABEL: test2:
24 ; CHECK:       // %bb.0:
25 ; CHECK-NEXT:    adrp x8, x
26 ; CHECK-NEXT:    add x8, x8, :lo12:x
27 ; CHECK-NEXT:    adrp x10, y
28 ; CHECK-NEXT:    add x10, x10, :lo12:y
29 ; CHECK-NEXT:    ldp x8, x9, [x8, #504]
30 ; CHECK-NEXT:    stp x8, x9, [x10, #504]
31 ; CHECK-NEXT:    ret
32   %tmp = load volatile i128, ptr getelementptr (i8, ptr @x, i64 504)
33   store volatile i128 %tmp, ptr getelementptr (i8, ptr @y, i64 504)
34   ret void
37 define void @test3() {
38 ; CHECK-LABEL: test3:
39 ; CHECK:       // %bb.0:
40 ; CHECK-NEXT:    adrp x8, x
41 ; CHECK-NEXT:    add x8, x8, :lo12:x
42 ; CHECK-NEXT:    adrp x10, y
43 ; CHECK-NEXT:    add x10, x10, :lo12:y
44 ; CHECK-NEXT:    add x8, x8, #512
45 ; CHECK-NEXT:    ldp x8, x9, [x8]
46 ; CHECK-NEXT:    add x10, x10, #512
47 ; CHECK-NEXT:    stp x8, x9, [x10]
48 ; CHECK-NEXT:    ret
49   %tmp = load volatile i128, ptr getelementptr (i8, ptr @x, i64 512)
50   store volatile i128 %tmp, ptr getelementptr (i8, ptr @y, i64 512)
51   ret void
54 define void @test4() {
55 ; CHECK-LABEL: test4:
56 ; CHECK:       // %bb.0:
57 ; CHECK-NEXT:    adrp x8, x
58 ; CHECK-NEXT:    add x8, x8, :lo12:x
59 ; CHECK-NEXT:    adrp x10, y
60 ; CHECK-NEXT:    add x10, x10, :lo12:y
61 ; CHECK-NEXT:    ldp x8, x9, [x8, #-512]
62 ; CHECK-NEXT:    stp x8, x9, [x10, #-512]
63 ; CHECK-NEXT:    ret
64   %tmp = load volatile i128, ptr getelementptr (i8, ptr @x, i64 -512)
65   store volatile i128 %tmp, ptr getelementptr (i8, ptr @y, i64 -512)
66   ret void
69 define void @test5() {
70 ; CHECK-LABEL: test5:
71 ; CHECK:       // %bb.0:
72 ; CHECK-NEXT:    adrp x8, x
73 ; CHECK-NEXT:    add x8, x8, :lo12:x
74 ; CHECK-NEXT:    adrp x10, y
75 ; CHECK-NEXT:    add x10, x10, :lo12:y
76 ; CHECK-NEXT:    sub x8, x8, #520
77 ; CHECK-NEXT:    ldp x8, x9, [x8]
78 ; CHECK-NEXT:    sub x10, x10, #520
79 ; CHECK-NEXT:    stp x8, x9, [x10]
80 ; CHECK-NEXT:    ret
81   %tmp = load volatile i128, ptr getelementptr (i8, ptr @x, i64 -520)
82   store volatile i128 %tmp, ptr getelementptr (i8, ptr @y, i64 -520)
83   ret void
86 define void @test6() {
87 ; CHECK-LABEL: test6:
88 ; CHECK:       // %bb.0:
89 ; CHECK-NEXT:    adrp x8, x
90 ; CHECK-NEXT:    add x8, x8, :lo12:x
91 ; CHECK-NEXT:    adrp x10, y
92 ; CHECK-NEXT:    add x10, x10, :lo12:y
93 ; CHECK-NEXT:    sub x8, x8, #520
94 ; CHECK-NEXT:    ldp x8, x9, [x8]
95 ; CHECK-NEXT:    sub x10, x10, #520
96 ; CHECK-NEXT:    stp x8, x9, [x10]
97 ; CHECK-NEXT:    ret
98   %tmp = load volatile i128, ptr getelementptr (i8, ptr @x, i64 -520)
99   store volatile i128 %tmp, ptr getelementptr (i8, ptr @y, i64 -520)
100   ret void
103 define void @test7() {
104 ; CHECK-LABEL: test7:
105 ; CHECK:       // %bb.0:
106 ; CHECK-NEXT:    adrp x8, x
107 ; CHECK-NEXT:    add x8, x8, :lo12:x
108 ; CHECK-NEXT:    adrp x10, y
109 ; CHECK-NEXT:    add x10, x10, :lo12:y
110 ; CHECK-NEXT:    add x8, x8, #503
111 ; CHECK-NEXT:    ldp x8, x9, [x8]
112 ; CHECK-NEXT:    add x10, x10, #503
113 ; CHECK-NEXT:    stp x8, x9, [x10]
114 ; CHECK-NEXT:    ret
115   %tmp = load volatile i128, ptr getelementptr (i8, ptr @x, i64 503)
116   store volatile i128 %tmp, ptr getelementptr (i8, ptr @y, i64 503)
117   ret void