Revert r354244 "[DAGCombiner] Eliminate dead stores to stack."
[llvm-complete.git] / test / CodeGen / AArch64 / GlobalISel / legalize-cmpxchg.mir
blobe8a73b717738e898213cb717276f59cc8ca92b1d
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
4 --- |
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 }
11 ...
13 ---
14 name:            cmpxchg_i8
15 body:             |
16   bb.0:
17     liveins: $x0
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 ...
36 ---
37 name:            cmpxchg_i16
38 body:             |
39   bb.0:
40     liveins: $x0
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 ...
59 ---
60 name:            cmpxchg_i32
61 body:             |
62   bb.0:
63     liveins: $x0
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 ...
78 ---
79 name:            cmpxchg_i64
80 body:             |
81   bb.0:
82     liveins: $x0
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 ...