163 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64 %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-LE3; RUN: llc -mtriple=aarch64_be %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-BE4 5@x = common dso_local global i128 06@y = common dso_local global i128 07 8define void @test1() {9; CHECK-LABEL: test1:10; CHECK: // %bb.0:11; CHECK-NEXT: adrp x8, x12; CHECK-NEXT: add x8, x8, :lo12:x13; CHECK-NEXT: adrp x10, y14; CHECK-NEXT: add x10, x10, :lo12:y15; CHECK-NEXT: ldp x8, x9, [x8]16; CHECK-NEXT: stp x8, x9, [x10]17; CHECK-NEXT: ret18 %tmp = load volatile i128, ptr @x19 store volatile i128 %tmp, ptr @y20 ret void21}22 23define void @test2() {24; CHECK-LABEL: test2:25; CHECK: // %bb.0:26; CHECK-NEXT: adrp x8, x27; CHECK-NEXT: add x8, x8, :lo12:x28; CHECK-NEXT: adrp x10, y29; CHECK-NEXT: add x10, x10, :lo12:y30; CHECK-NEXT: ldp x8, x9, [x8, #504]31; CHECK-NEXT: stp x8, x9, [x10, #504]32; CHECK-NEXT: ret33 %tmp = load volatile i128, ptr getelementptr (i8, ptr @x, i64 504)34 store volatile i128 %tmp, ptr getelementptr (i8, ptr @y, i64 504)35 ret void36}37 38define void @test3() {39; CHECK-LABEL: test3:40; CHECK: // %bb.0:41; CHECK-NEXT: adrp x8, x42; CHECK-NEXT: add x8, x8, :lo12:x43; CHECK-NEXT: adrp x10, y44; CHECK-NEXT: add x10, x10, :lo12:y45; CHECK-NEXT: add x8, x8, #51246; CHECK-NEXT: ldp x8, x9, [x8]47; CHECK-NEXT: add x10, x10, #51248; CHECK-NEXT: stp x8, x9, [x10]49; CHECK-NEXT: ret50 %tmp = load volatile i128, ptr getelementptr (i8, ptr @x, i64 512)51 store volatile i128 %tmp, ptr getelementptr (i8, ptr @y, i64 512)52 ret void53}54 55define void @test4() {56; CHECK-LABEL: test4:57; CHECK: // %bb.0:58; CHECK-NEXT: adrp x8, x59; CHECK-NEXT: add x8, x8, :lo12:x60; CHECK-NEXT: adrp x10, y61; CHECK-NEXT: add x10, x10, :lo12:y62; CHECK-NEXT: ldp x8, x9, [x8, #-512]63; CHECK-NEXT: stp x8, x9, [x10, #-512]64; CHECK-NEXT: ret65 %tmp = load volatile i128, ptr getelementptr (i8, ptr @x, i64 -512)66 store volatile i128 %tmp, ptr getelementptr (i8, ptr @y, i64 -512)67 ret void68}69 70define void @test5() {71; CHECK-LABEL: test5:72; CHECK: // %bb.0:73; CHECK-NEXT: adrp x8, x74; CHECK-NEXT: add x8, x8, :lo12:x75; CHECK-NEXT: adrp x10, y76; CHECK-NEXT: add x10, x10, :lo12:y77; CHECK-NEXT: sub x8, x8, #52078; CHECK-NEXT: ldp x8, x9, [x8]79; CHECK-NEXT: sub x10, x10, #52080; CHECK-NEXT: stp x8, x9, [x10]81; CHECK-NEXT: ret82 %tmp = load volatile i128, ptr getelementptr (i8, ptr @x, i64 -520)83 store volatile i128 %tmp, ptr getelementptr (i8, ptr @y, i64 -520)84 ret void85}86 87define void @test6() {88; CHECK-LABEL: test6:89; CHECK: // %bb.0:90; CHECK-NEXT: adrp x8, x91; CHECK-NEXT: add x8, x8, :lo12:x92; CHECK-NEXT: adrp x10, y93; CHECK-NEXT: add x10, x10, :lo12:y94; CHECK-NEXT: sub x8, x8, #52095; CHECK-NEXT: ldp x8, x9, [x8]96; CHECK-NEXT: sub x10, x10, #52097; CHECK-NEXT: stp x8, x9, [x10]98; CHECK-NEXT: ret99 %tmp = load volatile i128, ptr getelementptr (i8, ptr @x, i64 -520)100 store volatile i128 %tmp, ptr getelementptr (i8, ptr @y, i64 -520)101 ret void102}103 104define void @test7() {105; CHECK-LABEL: test7:106; CHECK: // %bb.0:107; CHECK-NEXT: adrp x8, x108; CHECK-NEXT: add x8, x8, :lo12:x109; CHECK-NEXT: adrp x10, y110; CHECK-NEXT: add x10, x10, :lo12:y111; CHECK-NEXT: add x8, x8, #503112; CHECK-NEXT: ldp x8, x9, [x8]113; CHECK-NEXT: add x10, x10, #503114; CHECK-NEXT: stp x8, x9, [x10]115; CHECK-NEXT: ret116 %tmp = load volatile i128, ptr getelementptr (i8, ptr @x, i64 503)117 store volatile i128 %tmp, ptr getelementptr (i8, ptr @y, i64 503)118 ret void119}120 121define i128 @load_nonvol(i32, i32, ptr %p) {122; CHECK-LABEL: load_nonvol:123; CHECK: // %bb.0: // %entry124; CHECK-NEXT: ldp x0, x1, [x2]125; CHECK-NEXT: ret126entry:127 %l = load i128, ptr %p, align 16128 ret i128 %l129}130 131define i128 @load_vol(i32, i32, ptr %p) {132; CHECK-LABEL: load_vol:133; CHECK: // %bb.0: // %entry134; CHECK-NEXT: ldp x0, x1, [x2]135; CHECK-NEXT: ret136entry:137 %l = load volatile i128, ptr %p, align 16138 ret i128 %l139}140 141define void @store_nonvol(i128 %a, ptr %p) {142; CHECK-LABEL: store_nonvol:143; CHECK: // %bb.0: // %entry144; CHECK-NEXT: stp x0, x1, [x2]145; CHECK-NEXT: ret146entry:147 store i128 %a, ptr %p, align 16148 ret void149}150 151define void @loadstore_vol(i128 %a, ptr %p) {152; CHECK-LABEL: loadstore_vol:153; CHECK: // %bb.0: // %entry154; CHECK-NEXT: stp x0, x1, [x2]155; CHECK-NEXT: ret156entry:157 store volatile i128 %a, ptr %p, align 16158 ret void159}160;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:161; CHECK-BE: {{.*}}162; CHECK-LE: {{.*}}163