xref: /llvm-project/llvm/test/Transforms/LowerAtomic/atomic-load.ll (revision e390c229a438ed1eb3396df8fbeeda89c49474e6)
1; RUN: opt < %s -passes=lower-atomic -S | FileCheck %s
2
3define i8 @add() {
4; CHECK-LABEL: @add(
5  %i = alloca i8
6  %j = atomicrmw add ptr %i, i8 42 monotonic
7; CHECK: [[INST:%[a-z0-9]+]] = load
8; CHECK-NEXT: add
9; CHECK-NEXT: store
10  ret i8 %j
11; CHECK: ret i8 [[INST]]
12}
13
14define i8 @nand() {
15; CHECK-LABEL: @nand(
16  %i = alloca i8
17  %j = atomicrmw nand ptr %i, i8 42 monotonic
18; CHECK: [[INST:%[a-z0-9]+]] = load
19; CHECK-NEXT: and
20; CHECK-NEXT: xor
21; CHECK-NEXT: store
22  ret i8 %j
23; CHECK: ret i8 [[INST]]
24}
25
26define i8 @min() {
27; CHECK-LABEL: @min(
28  %i = alloca i8
29  %j = atomicrmw min ptr %i, i8 42 monotonic
30; CHECK: [[INST:%[a-z0-9]+]] = load
31; CHECK-NEXT: icmp
32; CHECK-NEXT: select
33; CHECK-NEXT: store
34  ret i8 %j
35; CHECK: ret i8 [[INST]]
36}
37
38define float @fadd() {
39; CHECK-LABEL: @fadd(
40  %i = alloca float
41  %j = atomicrmw fadd ptr %i, float 42.0 monotonic
42; CHECK: [[INST:%[a-z0-9]+]] = load
43; CHECK-NEXT: fadd
44; CHECK-NEXT: store
45  ret float %j
46; CHECK: ret float [[INST]]
47}
48
49define float @fsub() {
50; CHECK-LABEL: @fsub(
51  %i = alloca float
52  %j = atomicrmw fsub ptr %i, float 42.0 monotonic
53; CHECK: [[INST:%[a-z0-9]+]] = load
54; CHECK-NEXT: fsub
55; CHECK-NEXT: store
56  ret float %j
57; CHECK: ret float [[INST]]
58}
59
60define float @fmax() {
61; CHECK-LABEL: @fmax(
62  %i = alloca float
63  %j = atomicrmw fmax ptr %i, float 42.0 monotonic
64; CHECK: [[INST:%[a-z0-9]+]] = load
65; CHECK-NEXT: call float @llvm.maxnum.f32
66; CHECK-NEXT: store
67  ret float %j
68; CHECK: ret float [[INST]]
69}
70
71define float @fmin() {
72; CHECK-LABEL: @fmin(
73  %i = alloca float
74  %j = atomicrmw fmin ptr %i, float 42.0 monotonic
75; CHECK: [[INST:%[a-z0-9]+]] = load
76; CHECK-NEXT: call float @llvm.minnum.f32
77; CHECK-NEXT: store
78  ret float %j
79; CHECK: ret float [[INST]]
80}
81