brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · bf40805 Raw
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