brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.9 KiB · 9988a74 Raw
175 lines · plain
1; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+v8.4a %s -o - | FileCheck %s2; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+lse2 %s -o - | FileCheck %s3 4define void @test_atomic_load(ptr %addr) {5; CHECK-LABEL: test_atomic_load:6 7; CHECK: ldp [[LO:x[0-9]+]], [[HI:x[0-9]+]], [x0]8; CHECK: stp [[LO]], [[HI]], [x0]9  %res.0 = load atomic i128, ptr %addr monotonic, align 1610  store i128 %res.0, ptr %addr11 12; CHECK: ldp [[LO:x[0-9]+]], [[HI:x[0-9]+]], [x0]13; CHECK: stp [[LO]], [[HI]], [x0]14  %res.1 = load atomic i128, ptr %addr unordered, align 1615  store i128 %res.1, ptr %addr16 17; CHECK: ldp [[LO:x[0-9]+]], [[HI:x[0-9]+]], [x0]18; CHECK: dmb ish19; CHECK: stp [[LO]], [[HI]], [x0]20  %res.2 = load atomic i128, ptr %addr acquire, align 1621  store i128 %res.2, ptr %addr22 23; CHECK: ldp [[LO:x[0-9]+]], [[HI:x[0-9]+]], [x0]24; CHECK: dmb ish25; CHECK: stp [[LO]], [[HI]], [x0]26  %res.3 = load atomic i128, ptr %addr seq_cst, align 1627  store i128 %res.3, ptr %addr28 29 30 31; CHECK: ldp [[LO:x[0-9]+]], [[HI:x[0-9]+]], [x0, #32]32; CHECK-DAG: stp [[LO]], [[HI]], [x0]33  %addr8.1 = getelementptr i8,  ptr %addr, i32 3234  %res.5 = load atomic i128, ptr %addr8.1 monotonic, align 1635  store i128 %res.5, ptr %addr36 37; CHECK: ldp [[LO:x[0-9]+]], [[HI:x[0-9]+]], [x0, #504]38; CHECK: stp [[LO]], [[HI]], [x0]39  %addr8.2 = getelementptr i8,  ptr %addr, i32 50440  %res.6 = load atomic i128, ptr %addr8.2 monotonic, align 1641  store i128 %res.6, ptr %addr42 43; CHECK: ldp [[LO:x[0-9]+]], [[HI:x[0-9]+]], [x0, #-512]44; CHECK: stp [[LO]], [[HI]], [x0]45  %addr8.3 = getelementptr i8,  ptr %addr, i32 -51246  %res.7 = load atomic i128, ptr %addr8.3 monotonic, align 1647  store i128 %res.7, ptr %addr48 49  ret void50}51 52define void @test_libcall_load(ptr %addr) {53; CHECK-LABEL: test_libcall_load:54; CHECK: bl __atomic_load55  %res.8 = load atomic i128, ptr %addr unordered, align 856  store i128 %res.8, ptr %addr57 58  ret void59}60 61define void @test_nonfolded_load1(ptr %addr) {62; CHECK-LABEL: test_nonfolded_load1:63 64; CHECK: add x[[ADDR:[0-9]+]], x0, #465; CHECK: ldp [[LO:x[0-9]+]], [[HI:x[0-9]+]], [x[[ADDR]]]66; CHECK: stp [[LO]], [[HI]], [x0]67  %addr8.1 = getelementptr i8,  ptr %addr, i32 468  %res.1 = load atomic i128, ptr %addr8.1 monotonic, align 1669  store i128 %res.1, ptr %addr70 71  ret void72}73 74define void @test_nonfolded_load2(ptr %addr) {75; CHECK-LABEL: test_nonfolded_load2:76 77; CHECK: add x[[ADDR:[0-9]+]], x0, #51278; CHECK: ldp [[LO:x[0-9]+]], [[HI:x[0-9]+]], [x[[ADDR]]]79; CHECK: stp [[LO]], [[HI]], [x0]80  %addr8.1 = getelementptr i8,  ptr %addr, i32 51281  %res.1 = load atomic i128, ptr %addr8.1 monotonic, align 1682  store i128 %res.1, ptr %addr83 84  ret void85}86 87define void @test_nonfolded_load3(ptr %addr) {88; CHECK-LABEL: test_nonfolded_load3:89 90; CHECK: sub x[[ADDR:[0-9]+]], x0, #52091; CHECK: ldp [[LO:x[0-9]+]], [[HI:x[0-9]+]], [x[[ADDR]]]92; CHECK: stp [[LO]], [[HI]], [x0]93  %addr8.1 = getelementptr i8,  ptr %addr, i32 -52094  %res.1 = load atomic i128, ptr %addr8.1 monotonic, align 1695  store i128 %res.1, ptr %addr96 97  ret void98}99 100define void @test_atomic_store(ptr %addr, i128 %val) {101; CHECK-LABEL: test_atomic_store:102 103; CHECK: stp x2, x3, [x0]104  store atomic i128 %val, ptr %addr monotonic, align 16105 106; CHECK: stp x2, x3, [x0]107  store atomic i128 %val, ptr %addr unordered, align 16108 109; CHECK: dmb ish110; CHECK: stp x2, x3, [x0]111  store atomic i128 %val, ptr %addr release, align 16112 113; CHECK: dmb ish114; CHECK: stp x2, x3, [x0]115; CHECK: dmb ish116  store atomic i128 %val, ptr %addr seq_cst, align 16117 118 119 120; CHECK: stp x2, x3, [x0, #8]121  %addr8.1 = getelementptr i8,  ptr %addr, i32 8122  store atomic i128 %val, ptr %addr8.1 monotonic, align 16123 124; CHECK: stp x2, x3, [x0, #504]125  %addr8.2 = getelementptr i8,  ptr %addr, i32 504126  store atomic i128 %val, ptr %addr8.2 monotonic, align 16127 128; CHECK: stp x2, x3, [x0, #-512]129  %addr8.3 = getelementptr i8,  ptr %addr, i32 -512130  store atomic i128 %val, ptr %addr8.3 monotonic, align 16131 132  ret void133}134 135define void @test_libcall_store(ptr %addr, i128 %val) {136; CHECK-LABEL: test_libcall_store:137; CHECK: bl __atomic_store138  store atomic i128 %val, ptr %addr unordered, align 8139 140  ret void141}142 143define void @test_nonfolded_store1(ptr %addr, i128 %val) {144; CHECK-LABEL: test_nonfolded_store1:145 146; CHECK: add x[[ADDR:[0-9]+]], x0, #4147; CHECK: stp x2, x3, [x[[ADDR]]]148  %addr8.1 = getelementptr i8,  ptr %addr, i32 4149  store atomic i128 %val, ptr %addr8.1 monotonic, align 16150 151  ret void152}153 154define void @test_nonfolded_store2(ptr %addr, i128 %val) {155; CHECK-LABEL: test_nonfolded_store2:156 157; CHECK: add x[[ADDR:[0-9]+]], x0, #512158; CHECK: stp x2, x3, [x[[ADDR]]]159  %addr8.1 = getelementptr i8,  ptr %addr, i32 512160  store atomic i128 %val, ptr %addr8.1 monotonic, align 16161 162  ret void163}164 165define void @test_nonfolded_store3(ptr %addr, i128 %val) {166; CHECK-LABEL: test_nonfolded_store3:167 168; CHECK: sub x[[ADDR:[0-9]+]], x0, #520169; CHECK: stp x2, x3, [x[[ADDR]]]170  %addr8.1 = getelementptr i8,  ptr %addr, i32 -520171  store atomic i128 %val, ptr %addr8.1 monotonic, align 16172 173  ret void174}175