1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=aarch64-- -mattr=+lse -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s 3 4--- | 5 target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128" 6 7 define void @cmpxchg_i8(i8* %addr) { ret void } 8 define void @cmpxchg_i16(i16* %addr) { ret void } 9 define void @cmpxchg_i32(i32* %addr) { ret void } 10 define void @cmpxchg_i64(i64* %addr) { ret void } 11... 12 13--- 14name: cmpxchg_i8 15body: | 16 bb.0: 17 liveins: $x0 18 19 ; CHECK-LABEL: name: cmpxchg_i8 20 ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0 21 ; CHECK: [[CMP:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 22 ; CHECK: [[CMPT:%[0-9]+]]:_(s8) = G_TRUNC [[CMP]] 23 ; CHECK: [[CST:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 24 ; CHECK: [[CSTT:%[0-9]+]]:_(s8) = G_TRUNC [[CST]] 25 ; CHECK: [[RES:%[0-9]+]]:_(s8) = G_ATOMIC_CMPXCHG [[COPY]](p0), [[CMPT]], [[CSTT]] :: (load store monotonic 1 on %ir.addr) 26 ; CHECK: [[RES2:%[0-9]+]]:_(s32) = G_ANYEXT [[RES]](s8) 27 ; CHECK: $w0 = COPY [[RES2]] 28 %0:_(p0) = COPY $x0 29 %1:_(s8) = G_CONSTANT i8 0 30 %2:_(s8) = G_CONSTANT i8 1 31 %3:_(s8) = G_ATOMIC_CMPXCHG %0, %1, %2 :: (load store monotonic 1 on %ir.addr) 32 %4:_(s32) = G_ANYEXT %3 33 $w0 = COPY %4(s32) 34... 35 36--- 37name: cmpxchg_i16 38body: | 39 bb.0: 40 liveins: $x0 41 42 ; CHECK-LABEL: name: cmpxchg_i16 43 ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0 44 ; CHECK: [[CMP:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 45 ; CHECK: [[CMPT:%[0-9]+]]:_(s16) = G_TRUNC [[CMP]] 46 ; CHECK: [[CST:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 47 ; CHECK: [[CSTT:%[0-9]+]]:_(s16) = G_TRUNC [[CST]] 48 ; CHECK: [[RES:%[0-9]+]]:_(s16) = G_ATOMIC_CMPXCHG [[COPY]](p0), [[CMPT]], [[CSTT]] :: (load store monotonic 2 on %ir.addr) 49 ; CHECK: [[RES2:%[0-9]+]]:_(s32) = G_ANYEXT [[RES]](s16) 50 ; CHECK: $w0 = COPY [[RES2]] 51 %0:_(p0) = COPY $x0 52 %1:_(s16) = G_CONSTANT i16 0 53 %2:_(s16) = G_CONSTANT i16 1 54 %3:_(s16) = G_ATOMIC_CMPXCHG %0, %1, %2 :: (load store monotonic 2 on %ir.addr) 55 %4:_(s32) = G_ANYEXT %3 56 $w0 = COPY %4(s32) 57... 58 59--- 60name: cmpxchg_i32 61body: | 62 bb.0: 63 liveins: $x0 64 65 ; CHECK-LABEL: name: cmpxchg_i32 66 ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0 67 ; CHECK: [[CMP:%[0-9]+]]:_(s32) = G_CONSTANT i32 0 68 ; CHECK: [[CST:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 69 ; CHECK: [[RES:%[0-9]+]]:_(s32) = G_ATOMIC_CMPXCHG [[COPY]](p0), [[CMP]], [[CST]] :: (load store monotonic 4 on %ir.addr) 70 ; CHECK: $w0 = COPY [[RES]] 71 %0:_(p0) = COPY $x0 72 %1:_(s32) = G_CONSTANT i32 0 73 %2:_(s32) = G_CONSTANT i32 1 74 %3:_(s32) = G_ATOMIC_CMPXCHG %0, %1, %2 :: (load store monotonic 4 on %ir.addr) 75 $w0 = COPY %3(s32) 76... 77 78--- 79name: cmpxchg_i64 80body: | 81 bb.0: 82 liveins: $x0 83 84 ; CHECK-LABEL: name: cmpxchg_i64 85 ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0 86 ; CHECK: [[CMP:%[0-9]+]]:_(s64) = G_CONSTANT i64 0 87 ; CHECK: [[CST:%[0-9]+]]:_(s64) = G_CONSTANT i64 1 88 ; CHECK: [[RES:%[0-9]+]]:_(s64) = G_ATOMIC_CMPXCHG [[COPY]](p0), [[CMP]], [[CST]] :: (load store monotonic 8 on %ir.addr) 89 ; CHECK: $x0 = COPY [[RES]] 90 %0:_(p0) = COPY $x0 91 %1:_(s64) = G_CONSTANT i64 0 92 %2:_(s64) = G_CONSTANT i64 1 93 %3:_(s64) = G_ATOMIC_CMPXCHG %0, %1, %2 :: (load store monotonic 8 on %ir.addr) 94 $x0 = COPY %3(s64) 95... 96