65 lines · plain
1; RUN: opt -S -passes=mergefunc < %s | FileCheck %s2 3; Minor note: functions need to be at least three instructions long4; to be considered by -mergefunc.5 6declare i32 @foo(...)7 8define i32 @f() {9; CHECK-LABEL: @f(10 entry:11 %v0 = call i32 (...) @foo(i32 10) [ "foo"(i32 20) ]12 %v1 = call i32 (...) @foo(i32 10) [ "foo"(i32 20) ]13 %v2 = call i32 (...) @foo(i32 10) [ "foo"(i32 20) ]14 15; CHECK: %v0 = call i32 (...) @foo(i32 10) [ "foo"(i32 20) ]16; CHECK: %v1 = call i32 (...) @foo(i32 10) [ "foo"(i32 20) ]17; CHECK: %v2 = call i32 (...) @foo(i32 10) [ "foo"(i32 20) ]18 19 ret i32 %v220}21 22define i32 @g() {23; CHECK-LABEL: @g(24 entry:25 %v0 = call i32 (...) @foo() [ "foo"(i32 10, i32 20) ]26 %v1 = call i32 (...) @foo() [ "foo"(i32 10, i32 20) ]27 %v2 = call i32 (...) @foo() [ "foo"(i32 10, i32 20) ]28 29; CHECK: %v0 = call i32 (...) @foo() [ "foo"(i32 10, i32 20) ]30; CHECK: %v1 = call i32 (...) @foo() [ "foo"(i32 10, i32 20) ]31; CHECK: %v2 = call i32 (...) @foo() [ "foo"(i32 10, i32 20) ]32 33 ret i32 %v234}35 36define i32 @f.invoke() personality i8 3 {37; CHECK-LABEL: @f.invoke(38 entry:39; CHECK: %v0 = invoke i32 (...) @foo(i32 10) [ "foo"(i32 20) ]40 %v0 = invoke i32 (...) @foo(i32 10) [ "foo"(i32 20) ]41 to label %normal unwind label %exception42 43 normal:44 ret i32 %v045 46 exception:47 %cleanup = landingpad i8 cleanup48 ret i32 049}50 51define i32 @g.invoke() personality i8 3 {52; CHECK-LABEL: @g.invoke(53 entry:54; CHECK: %v0 = invoke i32 (...) @foo() [ "foo"(i32 10, i32 20) ]55 %v0 = invoke i32 (...) @foo() [ "foo"(i32 10, i32 20) ]56 to label %normal unwind label %exception57 58 normal:59 ret i32 %v060 61 exception:62 %cleanup = landingpad i8 cleanup63 ret i32 064}65