93 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -S -passes=gvn < %s | FileCheck %s3 4declare void @capture(ptr)5declare void @unknown_call()6 7define i32 @full_capture() {8; CHECK-LABEL: define i32 @full_capture() {9; CHECK-NEXT: [[A:%.*]] = alloca i32, align 410; CHECK-NEXT: call void @capture(ptr [[A]])11; CHECK-NEXT: store i32 1, ptr [[A]], align 412; CHECK-NEXT: call void @unknown_call()13; CHECK-NEXT: [[V:%.*]] = load i32, ptr [[A]], align 414; CHECK-NEXT: ret i32 [[V]]15;16 %a = alloca i3217 call void @capture(ptr %a)18 store i32 1, ptr %a19 call void @unknown_call()20 %v = load i32, ptr %a21 ret i32 %v22}23 24define i32 @address_capture() {25; CHECK-LABEL: define i32 @address_capture() {26; CHECK-NEXT: [[A:%.*]] = alloca i32, align 427; CHECK-NEXT: call void @capture(ptr captures(address) [[A]])28; CHECK-NEXT: store i32 1, ptr [[A]], align 429; CHECK-NEXT: call void @unknown_call()30; CHECK-NEXT: ret i32 131;32 %a = alloca i3233 call void @capture(ptr captures(address) %a)34 store i32 1, ptr %a35 call void @unknown_call()36 %v = load i32, ptr %a37 ret i32 %v38}39 40define i32 @read_provenance_capture() {41; CHECK-LABEL: define i32 @read_provenance_capture() {42; CHECK-NEXT: [[A:%.*]] = alloca i32, align 443; CHECK-NEXT: call void @capture(ptr captures(address, read_provenance) [[A]])44; CHECK-NEXT: store i32 1, ptr [[A]], align 445; CHECK-NEXT: call void @unknown_call()46; CHECK-NEXT: ret i32 147;48 %a = alloca i3249 call void @capture(ptr captures(address, read_provenance) %a)50 store i32 1, ptr %a51 call void @unknown_call()52 %v = load i32, ptr %a53 ret i32 %v54}55 56define i32 @read_provenance_capture_and_full_capture() {57; CHECK-LABEL: define i32 @read_provenance_capture_and_full_capture() {58; CHECK-NEXT: [[A:%.*]] = alloca i32, align 459; CHECK-NEXT: call void @capture(ptr captures(address, read_provenance) [[A]])60; CHECK-NEXT: call void @capture(ptr [[A]])61; CHECK-NEXT: store i32 1, ptr [[A]], align 462; CHECK-NEXT: call void @unknown_call()63; CHECK-NEXT: [[V:%.*]] = load i32, ptr [[A]], align 464; CHECK-NEXT: ret i32 [[V]]65;66 %a = alloca i3267 call void @capture(ptr captures(address, read_provenance) %a)68 call void @capture(ptr %a)69 store i32 1, ptr %a70 call void @unknown_call()71 %v = load i32, ptr %a72 ret i32 %v73}74 75define i32 @read_provenance_capture_and_full_capture_commuted() {76; CHECK-LABEL: define i32 @read_provenance_capture_and_full_capture_commuted() {77; CHECK-NEXT: [[A:%.*]] = alloca i32, align 478; CHECK-NEXT: call void @capture(ptr [[A]])79; CHECK-NEXT: call void @capture(ptr captures(address, read_provenance) [[A]])80; CHECK-NEXT: store i32 1, ptr [[A]], align 481; CHECK-NEXT: call void @unknown_call()82; CHECK-NEXT: [[V:%.*]] = load i32, ptr [[A]], align 483; CHECK-NEXT: ret i32 [[V]]84;85 %a = alloca i3286 call void @capture(ptr %a)87 call void @capture(ptr captures(address, read_provenance) %a)88 store i32 1, ptr %a89 call void @unknown_call()90 %v = load i32, ptr %a91 ret i32 %v92}93