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