brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 9ec969c Raw
96 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --scrub-attributes2; RUN: opt -S < %s -passes=inline,argpromotion | FileCheck %s --check-prefix=ARGPROMOTION3 4%S = type { ptr }5 6; Inlining should nuke the invoke (and any inlined calls) here even with7; argument promotion running along with it.8define void @zot() personality ptr @wibble {9; ARGPROMOTION-LABEL: define {{[^@]+}}@zot() personality ptr @wibble {10; ARGPROMOTION-NEXT:  bb:11; ARGPROMOTION-NEXT:    unreachable12; ARGPROMOTION:       hoge.exit:13; ARGPROMOTION-NEXT:    br label [[BB1:%.*]]14; ARGPROMOTION:       bb1:15; ARGPROMOTION-NEXT:    unreachable16; ARGPROMOTION:       bb2:17; ARGPROMOTION-NEXT:    [[TEMP:%.*]] = landingpad { ptr, i32 }18; ARGPROMOTION-NEXT:    cleanup19; ARGPROMOTION-NEXT:    unreachable20;21bb:22  invoke void @hoge()23  to label %bb1 unwind label %bb224 25bb1:26  unreachable27 28bb2:29  %temp = landingpad { ptr, i32 }30  cleanup31  unreachable32}33 34define internal void @hoge() {35bb:36  %temp = call fastcc ptr @spam(ptr @eggs)37  %temp1 = call fastcc ptr @spam(ptr @barney)38  unreachable39}40 41define internal fastcc ptr @spam(ptr %arg) {42bb:43  unreachable44}45 46define internal i1 @eggs(ptr %arg) {47; ARGPROMOTION-LABEL: define {{[^@]+}}@eggs() {48; ARGPROMOTION-NEXT:  bb:49; ARGPROMOTION-NEXT:    unreachable50;51bb:52  %temp = call zeroext i1 @barney(ptr %arg)53  unreachable54}55 56define internal i1 @barney(ptr %arg) {57bb:58  ret i1 poison59}60 61define i32 @test_inf_promote_caller(i32 %arg) {62; ARGPROMOTION-LABEL: define {{[^@]+}}@test_inf_promote_caller63; ARGPROMOTION-SAME: (i32 [[ARG:%.*]]) {64; ARGPROMOTION-NEXT:  bb:65; ARGPROMOTION-NEXT:    [[TEMP:%.*]] = alloca [[S:%.*]], align 866; ARGPROMOTION-NEXT:    [[TEMP1:%.*]] = alloca [[S]], align 867; ARGPROMOTION-NEXT:    [[TEMP2:%.*]] = call i32 @test_inf_promote_callee(ptr [[TEMP]], ptr [[TEMP1]])68; ARGPROMOTION-NEXT:    ret i32 069;70bb:71  %temp = alloca %S72  %temp1 = alloca %S73  %temp2 = call i32 @test_inf_promote_callee(ptr %temp, ptr %temp1)74 75  ret i32 076}77 78define internal i32 @test_inf_promote_callee(ptr %arg, ptr %arg1) {79; ARGPROMOTION-LABEL: define {{[^@]+}}@test_inf_promote_callee80; ARGPROMOTION-SAME: (ptr [[ARG:%.*]], ptr [[ARG1:%.*]]) {81; ARGPROMOTION-NEXT:  bb:82; ARGPROMOTION-NEXT:    [[TEMP2:%.*]] = load ptr, ptr [[ARG1]], align 883; ARGPROMOTION-NEXT:    [[TEMP4:%.*]] = load ptr, ptr [[ARG]], align 884; ARGPROMOTION-NEXT:    [[TEMP5:%.*]] = call i32 @test_inf_promote_callee(ptr [[TEMP4]], ptr [[TEMP2]])85; ARGPROMOTION-NEXT:    ret i32 086;87bb:88  %temp2 = load ptr, ptr %arg189  %temp4 = load ptr, ptr %arg90  %temp5 = call i32 @test_inf_promote_callee(ptr %temp4, ptr %temp2)91 92  ret i32 093}94 95declare i32 @wibble(...)96