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