xref: /llvm-project/llvm/test/Transforms/DeadStoreElimination/launder.invariant.group.ll (revision f497a00da968b0ff90d8c98caa184d14b9a92495)
1; RUN: opt < %s -passes=dse -S | FileCheck %s
2
3; CHECK-LABEL: void @skipBarrier(ptr %ptr)
4define void @skipBarrier(ptr %ptr) {
5; CHECK-NOT: store i8 42
6  store i8 42, ptr %ptr
7; CHECK: %ptr2 = call ptr @llvm.launder.invariant.group.p0(ptr %ptr)
8  %ptr2 = call ptr @llvm.launder.invariant.group.p0(ptr %ptr)
9; CHECK: store i8 43
10  store i8 43, ptr %ptr2
11  ret void
12}
13
14; CHECK-LABEL: void @skip2Barriers(ptr %ptr)
15define void @skip2Barriers(ptr %ptr) {
16; CHECK-NOT: store i8 42
17  store i8 42, ptr %ptr
18; CHECK: %ptr2 = call ptr @llvm.launder.invariant.group.p0(ptr %ptr)
19  %ptr2 = call ptr @llvm.launder.invariant.group.p0(ptr %ptr)
20; CHECK-NOT: store i8 43
21  store i8 43, ptr %ptr2
22  %ptr3 = call ptr @llvm.launder.invariant.group.p0(ptr %ptr2)
23  %ptr4 = call ptr @llvm.launder.invariant.group.p0(ptr %ptr3)
24
25; CHECK: store i8 44
26  store i8 44, ptr %ptr4
27  ret void
28}
29
30; CHECK-LABEL: void @skip3Barriers(ptr %ptr)
31define void @skip3Barriers(ptr %ptr) {
32; CHECK-NOT: store i8 42
33  store i8 42, ptr %ptr
34; CHECK: %ptr2 = call ptr @llvm.strip.invariant.group.p0(ptr %ptr)
35  %ptr2 = call ptr @llvm.strip.invariant.group.p0(ptr %ptr)
36; CHECK-NOT: store i8 43
37  store i8 43, ptr %ptr2
38  %ptr3 = call ptr @llvm.strip.invariant.group.p0(ptr %ptr2)
39  %ptr4 = call ptr @llvm.strip.invariant.group.p0(ptr %ptr3)
40
41; CHECK: store i8 44
42  store i8 44, ptr %ptr4
43  ret void
44}
45
46; CHECK-LABEL: void @skip4Barriers(ptr %ptr)
47define void @skip4Barriers(ptr %ptr) {
48; CHECK-NOT: store i8 42
49  store i8 42, ptr %ptr
50; CHECK: %ptr2 = call ptr @llvm.strip.invariant.group.p0(ptr %ptr)
51  %ptr2 = call ptr @llvm.strip.invariant.group.p0(ptr %ptr)
52; CHECK-NOT: store i8 43
53  store i8 43, ptr %ptr2
54  %ptr3 = call ptr @llvm.launder.invariant.group.p0(ptr %ptr2)
55  %ptr4 = call ptr @llvm.strip.invariant.group.p0(ptr %ptr3)
56  %ptr5 = call ptr @llvm.launder.invariant.group.p0(ptr %ptr3)
57
58; CHECK: store i8 44
59  store i8 44, ptr %ptr5
60  ret void
61}
62
63
64declare ptr @llvm.launder.invariant.group.p0(ptr)
65declare ptr @llvm.strip.invariant.group.p0(ptr)
66