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
5 target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
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 }
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]]
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
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]]
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
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]]
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)
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]]
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)