brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · 0adc103 Raw
76 lines · plain
1; RUN: llc -mtriple=aarch64-- -O0 -fast-isel -fast-isel-abort=4 -verify-machineinstrs < %s | FileCheck %s2 3; CHECK-LABEL: cmpxchg_monotonic_32:4; CHECK:          mov [[ADDR:x[0-9]+]], x05; CHECK: [[RETRY:.LBB[0-9_]+]]:6; CHECK-NEXT:     ldaxr w0, [[[ADDR]]]7; CHECK-NEXT:     cmp w0, w18; CHECK-NEXT:     b.ne [[DONE:.LBB[0-9_]+]]9; CHECK-NEXT: // %bb.2:10; CHECK-NEXT:     stlxr [[STATUS:w[0-9]+]], w2, [[[ADDR]]]11; CHECK-NEXT:     cbnz [[STATUS]], [[RETRY]]12; CHECK-NEXT: [[DONE]]:13; CHECK-NEXT:     cmp w0, w114; CHECK-NEXT:     cset [[STATUS]], eq15; CHECK-NEXT:     and [[STATUS32:w[0-9]+]], [[STATUS]], #0x116; CHECK-NEXT:     str [[STATUS32]], [x3]17define i32 @cmpxchg_monotonic_32(ptr %p, i32 %cmp, i32 %new, ptr %ps) #0 {18  %tmp0 = cmpxchg ptr %p, i32 %cmp, i32 %new monotonic monotonic19  %tmp1 = extractvalue { i32, i1 } %tmp0, 020  %tmp2 = extractvalue { i32, i1 } %tmp0, 121  %tmp3 = zext i1 %tmp2 to i3222  store i32 %tmp3, ptr %ps23  ret i32 %tmp124}25 26; CHECK-LABEL: cmpxchg_acq_rel_32_load:27; CHECK:      // %bb.0:28; CHECK:          mov [[ADDR:x[0-9]+]], x029; CHECK:          ldr [[NEW:w[0-9]+]], [x2]30; CHECK-NEXT: [[RETRY:.LBB[0-9_]+]]:31; CHECK-NEXT:     ldaxr w0, [[[ADDR]]]32; CHECK-NEXT:     cmp w0, w133; CHECK-NEXT:     b.ne [[DONE:.LBB[0-9_]+]]34; CHECK-NEXT: // %bb.2:35; CHECK-NEXT:     stlxr [[STATUS:w[0-9]+]], [[NEW]], [[[ADDR]]]36; CHECK-NEXT:     cbnz [[STATUS]], [[RETRY]]37; CHECK-NEXT: [[DONE]]:38; CHECK-NEXT:     cmp w0, w139; CHECK-NEXT:     cset [[STATUS]], eq40; CHECK-NEXT:     and [[STATUS32:w[0-9]+]], [[STATUS]], #0x141; CHECK-NEXT:     str [[STATUS32]], [x3]42define i32 @cmpxchg_acq_rel_32_load(ptr %p, i32 %cmp, ptr %pnew, ptr %ps) #0 {43  %new = load i32, ptr %pnew44  %tmp0 = cmpxchg ptr %p, i32 %cmp, i32 %new acq_rel acquire45  %tmp1 = extractvalue { i32, i1 } %tmp0, 046  %tmp2 = extractvalue { i32, i1 } %tmp0, 147  %tmp3 = zext i1 %tmp2 to i3248  store i32 %tmp3, ptr %ps49  ret i32 %tmp150}51 52; CHECK-LABEL: cmpxchg_seq_cst_64:53; CHECK: mov [[ADDR:x[0-9]+]], x054; CHECK: [[RETRY:.LBB[0-9_]+]]:55; CHECK-NEXT:     ldaxr x0, [[[ADDR]]]56; CHECK-NEXT:     cmp x0, x157; CHECK-NEXT:     b.ne [[DONE:.LBB[0-9_]+]]58; CHECK-NEXT: // %bb.2:59; CHECK-NEXT:     stlxr [[STATUS]], x2, [[[ADDR]]]60; CHECK-NEXT:     cbnz [[STATUS]], [[RETRY]]61; CHECK-NEXT: [[DONE]]:62; CHECK-NEXT:     cmp x0, x163; CHECK-NEXT:     cset [[STATUS:w[0-9]+]], eq64; CHECK-NEXT:     and [[STATUS32:w[0-9]+]], [[STATUS]], #0x165; CHECK-NEXT:     str [[STATUS32]], [x3]66define i64 @cmpxchg_seq_cst_64(ptr %p, i64 %cmp, i64 %new, ptr %ps) #0 {67  %tmp0 = cmpxchg ptr %p, i64 %cmp, i64 %new seq_cst seq_cst68  %tmp1 = extractvalue { i64, i1 } %tmp0, 069  %tmp2 = extractvalue { i64, i1 } %tmp0, 170  %tmp3 = zext i1 %tmp2 to i3271  store i32 %tmp3, ptr %ps72  ret i64 %tmp173}74 75attributes #0 = { nounwind }76