1; RUN: opt < %s -basic-aa -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 30; 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 64declare i8* @llvm.launder.invariant.group.p0i8(i8*) 65declare i8* @llvm.strip.invariant.group.p0i8(i8*) 66