xref: /llvm-project/llvm/test/Transforms/InferAlignment/atomic.ll (revision 0f152a55d3e4e71f7c795bf555e40c8895b97077)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
2; RUN: opt -S < %s -passes=infer-alignment | FileCheck %s
3
4; ------------------------------------------------------------------------------
5; load/store of null
6; ------------------------------------------------------------------------------
7
8define void @load_null() {
9; CHECK-LABEL: define void @load_null() {
10; CHECK-NEXT:    [[X_0:%.*]] = load atomic i32, ptr null unordered, align 4294967296
11; CHECK-NEXT:    [[X_1:%.*]] = load atomic i32, ptr null monotonic, align 4294967296
12; CHECK-NEXT:    [[X_2:%.*]] = load atomic i32, ptr null seq_cst, align 4294967296
13; CHECK-NEXT:    ret void
14;
15  %x.0 = load atomic i32, ptr null unordered, align 4
16  %x.1 = load atomic i32, ptr null monotonic, align 4
17  %x.2 = load atomic i32, ptr null seq_cst, align 4
18  ret void
19}
20
21define void @store_null() {
22; CHECK-LABEL: define void @store_null() {
23; CHECK-NEXT:    store atomic i32 0, ptr null unordered, align 4294967296
24; CHECK-NEXT:    store atomic i32 0, ptr null monotonic, align 4294967296
25; CHECK-NEXT:    store atomic i32 0, ptr null seq_cst, align 4294967296
26; CHECK-NEXT:    ret void
27;
28  store atomic i32 0, ptr null unordered, align 4
29  store atomic i32 0, ptr null monotonic, align 4
30  store atomic i32 0, ptr null seq_cst, align 4
31  ret void
32}
33
34; ------------------------------------------------------------------------------
35; load/store of global
36; ------------------------------------------------------------------------------
37@c = global i64 42
38
39define void @load_nonnull() {
40; CHECK-LABEL: define void @load_nonnull() {
41; CHECK-NEXT:    [[X_0:%.*]] = load atomic i32, ptr @c unordered, align 8
42; CHECK-NEXT:    [[X_1:%.*]] = load atomic i32, ptr @c monotonic, align 8
43; CHECK-NEXT:    [[X_2:%.*]] = load atomic i32, ptr @c seq_cst, align 8
44; CHECK-NEXT:    ret void
45;
46  %x.0 = load atomic i32, ptr @c unordered, align 4
47  %x.1 = load atomic i32, ptr @c monotonic, align 4
48  %x.2 = load atomic i32, ptr @c seq_cst, align 4
49  ret void
50}
51
52define void @store_nonnull() {
53; CHECK-LABEL: define void @store_nonnull() {
54; CHECK-NEXT:    store atomic i32 0, ptr @c unordered, align 8
55; CHECK-NEXT:    store atomic i32 0, ptr @c monotonic, align 8
56; CHECK-NEXT:    store atomic i32 0, ptr @c seq_cst, align 8
57; CHECK-NEXT:    ret void
58;
59  store atomic i32 0, ptr @c unordered, align 4
60  store atomic i32 0, ptr @c monotonic, align 4
61  store atomic i32 0, ptr @c seq_cst, align 4
62  ret void
63}
64
65; ------------------------------------------------------------------------------
66; load/store of alloca
67; ------------------------------------------------------------------------------
68
69define void @load_alloca() {
70; CHECK-LABEL: define void @load_alloca() {
71; CHECK-NEXT:    [[ALLOCA:%.*]] = alloca i32, align 4
72; CHECK-NEXT:    [[X_0:%.*]] = load atomic i32, ptr [[ALLOCA]] unordered, align 4
73; CHECK-NEXT:    [[X_1:%.*]] = load atomic i32, ptr [[ALLOCA]] monotonic, align 4
74; CHECK-NEXT:    [[X_2:%.*]] = load atomic i32, ptr [[ALLOCA]] seq_cst, align 4
75; CHECK-NEXT:    ret void
76;
77  %alloca = alloca i32
78  %x.0 = load atomic i32, ptr %alloca unordered, align 1
79  %x.1 = load atomic i32, ptr %alloca monotonic, align 1
80  %x.2 = load atomic i32, ptr %alloca seq_cst, align 1
81  ret void
82}
83
84define void @store_alloca() {
85; CHECK-LABEL: define void @store_alloca() {
86; CHECK-NEXT:    [[ALLOCA:%.*]] = alloca i32, align 4
87; CHECK-NEXT:    store atomic i32 0, ptr [[ALLOCA]] unordered, align 4
88; CHECK-NEXT:    store atomic i32 0, ptr [[ALLOCA]] monotonic, align 4
89; CHECK-NEXT:    store atomic i32 0, ptr [[ALLOCA]] seq_cst, align 4
90; CHECK-NEXT:    ret void
91;
92  %alloca = alloca i32
93  store atomic i32 0, ptr %alloca unordered, align 1
94  store atomic i32 0, ptr %alloca monotonic, align 1
95  store atomic i32 0, ptr %alloca seq_cst, align 1
96  ret void
97}
98