66 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -S -passes=dse < %s | FileCheck %s3 4declare ptr @passthrough(ptr)5 6define i16 @ret_only() {7; CHECK-LABEL: define i16 @ret_only() {8; CHECK-NEXT: [[A:%.*]] = alloca i16, align 19; CHECK-NEXT: store i16 1, ptr [[A]], align 110; CHECK-NEXT: [[CALL:%.*]] = call ptr @passthrough(ptr readnone captures(ret: address, provenance) [[A]])11; CHECK-NEXT: [[V:%.*]] = load i16, ptr [[CALL]], align 112; CHECK-NEXT: ret i16 [[V]]13;14 %a = alloca i16, align 115 store i16 1, ptr %a, align 116 %call = call ptr @passthrough(ptr readnone captures(ret: address, provenance) %a)17 %v = load i16, ptr %call, align 118 ret i16 %v19}20 21define i16 @ret_has_more_components() {22; CHECK-LABEL: define i16 @ret_has_more_components() {23; CHECK-NEXT: [[A:%.*]] = alloca i16, align 124; CHECK-NEXT: store i16 1, ptr [[A]], align 125; CHECK-NEXT: [[CALL:%.*]] = call ptr @passthrough(ptr readnone captures(address, ret: address, provenance) [[A]])26; CHECK-NEXT: [[V:%.*]] = load i16, ptr [[CALL]], align 127; CHECK-NEXT: ret i16 [[V]]28;29 %a = alloca i16, align 130 store i16 1, ptr %a, align 131 %call = call ptr @passthrough(ptr readnone captures(address, ret: address, provenance) %a)32 %v = load i16, ptr %call, align 133 ret i16 %v34}35 36; Okay to drop the store as only the address of %a is captured, so the load37; cannot be accessing %a.38define i16 @address_capture() {39; CHECK-LABEL: define i16 @address_capture() {40; CHECK-NEXT: [[A:%.*]] = alloca i16, align 141; CHECK-NEXT: [[CALL:%.*]] = call ptr @passthrough(ptr readnone captures(address) [[A]])42; CHECK-NEXT: [[V:%.*]] = load i16, ptr [[CALL]], align 143; CHECK-NEXT: ret i16 [[V]]44;45 %a = alloca i16, align 146 store i16 1, ptr %a, align 147 %call = call ptr @passthrough(ptr readnone captures(address) %a)48 %v = load i16, ptr %call, align 149 ret i16 %v50}51 52define i16 @read_only_capture() {53; CHECK-LABEL: define i16 @read_only_capture() {54; CHECK-NEXT: [[A:%.*]] = alloca i16, align 155; CHECK-NEXT: store i16 1, ptr [[A]], align 156; CHECK-NEXT: [[CALL:%.*]] = call ptr @passthrough(ptr readnone captures(address, read_provenance) [[A]])57; CHECK-NEXT: [[V:%.*]] = load i16, ptr [[CALL]], align 158; CHECK-NEXT: ret i16 [[V]]59;60 %a = alloca i16, align 161 store i16 1, ptr %a, align 162 %call = call ptr @passthrough(ptr readnone captures(address, read_provenance) %a)63 %v = load i16, ptr %call, align 164 ret i16 %v65}66