blob: 725ab6e5e346825a05bdffa63bd1a5072f8274e9 [file] [log] [blame]
Piotr Padlewskic77ab8e2018-05-03 11:03:53 +00001; RUN: opt < %s -basicaa -dse -S | FileCheck %s
2
3; CHECK-LABEL: void @skipBarrier(i8* %ptr)
4define void @skipBarrier(i8* %ptr) {
5; CHECK-NOT: store i8 42
6 store i8 42, i8* %ptr
7; CHECK: %ptr2 = call i8* @llvm.launder.invariant.group.p0i8(i8* %ptr)
8 %ptr2 = call i8* @llvm.launder.invariant.group.p0i8(i8* %ptr)
9; CHECK: store i8 43
10 store i8 43, i8* %ptr2
11 ret void
12}
13
14; CHECK-LABEL: void @skip2Barriers(i8* %ptr)
15define void @skip2Barriers(i8* %ptr) {
16; CHECK-NOT: store i8 42
17 store i8 42, i8* %ptr
18; CHECK: %ptr2 = call i8* @llvm.launder.invariant.group.p0i8(i8* %ptr)
19 %ptr2 = call i8* @llvm.launder.invariant.group.p0i8(i8* %ptr)
20; CHECK-NOT: store i8 43
21 store i8 43, i8* %ptr2
22 %ptr3 = call i8* @llvm.launder.invariant.group.p0i8(i8* %ptr2)
23 %ptr4 = call i8* @llvm.launder.invariant.group.p0i8(i8* %ptr3)
24
25; CHECK: store i8 44
26 store i8 44, i8* %ptr4
27 ret void
28}
29
Piotr Padlewski5b3db452018-07-02 04:49:30 +000030; CHECK-LABEL: void @skip3Barriers(i8* %ptr)
31define void @skip3Barriers(i8* %ptr) {
32; CHECK-NOT: store i8 42
33 store i8 42, i8* %ptr
34; CHECK: %ptr2 = call i8* @llvm.strip.invariant.group.p0i8(i8* %ptr)
35 %ptr2 = call i8* @llvm.strip.invariant.group.p0i8(i8* %ptr)
36; CHECK-NOT: store i8 43
37 store i8 43, i8* %ptr2
38 %ptr3 = call i8* @llvm.strip.invariant.group.p0i8(i8* %ptr2)
39 %ptr4 = call i8* @llvm.strip.invariant.group.p0i8(i8* %ptr3)
40
41; CHECK: store i8 44
42 store i8 44, i8* %ptr4
43 ret void
44}
45
46; CHECK-LABEL: void @skip4Barriers(i8* %ptr)
47define void @skip4Barriers(i8* %ptr) {
48; CHECK-NOT: store i8 42
49 store i8 42, i8* %ptr
50; CHECK: %ptr2 = call i8* @llvm.strip.invariant.group.p0i8(i8* %ptr)
51 %ptr2 = call i8* @llvm.strip.invariant.group.p0i8(i8* %ptr)
52; CHECK-NOT: store i8 43
53 store i8 43, i8* %ptr2
54 %ptr3 = call i8* @llvm.launder.invariant.group.p0i8(i8* %ptr2)
55 %ptr4 = call i8* @llvm.strip.invariant.group.p0i8(i8* %ptr3)
56 %ptr5 = call i8* @llvm.launder.invariant.group.p0i8(i8* %ptr3)
57
58; CHECK: store i8 44
59 store i8 44, i8* %ptr5
60 ret void
61}
62
63
Piotr Padlewskic77ab8e2018-05-03 11:03:53 +000064declare i8* @llvm.launder.invariant.group.p0i8(i8*)
Piotr Padlewski5b3db452018-07-02 04:49:30 +000065declare i8* @llvm.strip.invariant.group.p0i8(i8*)