| ; RUN: opt -S -passes=mergefunc < %s | FileCheck %s |
| |
| ; Minor note: functions need to be at least three instructions long |
| ; to be considered by -mergefunc. |
| |
| declare i32 @foo(...) |
| |
| define i32 @f() { |
| ; CHECK-LABEL: @f( |
| entry: |
| %v0 = call i32 (...) @foo(i32 10) [ "foo"(i32 20) ] |
| %v1 = call i32 (...) @foo(i32 10) [ "foo"(i32 20) ] |
| %v2 = call i32 (...) @foo(i32 10) [ "foo"(i32 20) ] |
| |
| ; CHECK: %v0 = call i32 (...) @foo(i32 10) [ "foo"(i32 20) ] |
| ; CHECK: %v1 = call i32 (...) @foo(i32 10) [ "foo"(i32 20) ] |
| ; CHECK: %v2 = call i32 (...) @foo(i32 10) [ "foo"(i32 20) ] |
| |
| ret i32 %v2 |
| } |
| |
| define i32 @g() { |
| ; CHECK-LABEL: @g( |
| entry: |
| %v0 = call i32 (...) @foo() [ "foo"(i32 10, i32 20) ] |
| %v1 = call i32 (...) @foo() [ "foo"(i32 10, i32 20) ] |
| %v2 = call i32 (...) @foo() [ "foo"(i32 10, i32 20) ] |
| |
| ; CHECK: %v0 = call i32 (...) @foo() [ "foo"(i32 10, i32 20) ] |
| ; CHECK: %v1 = call i32 (...) @foo() [ "foo"(i32 10, i32 20) ] |
| ; CHECK: %v2 = call i32 (...) @foo() [ "foo"(i32 10, i32 20) ] |
| |
| ret i32 %v2 |
| } |
| |
| define i32 @f.invoke() personality i8 3 { |
| ; CHECK-LABEL: @f.invoke( |
| entry: |
| ; CHECK: %v0 = invoke i32 (...) @foo(i32 10) [ "foo"(i32 20) ] |
| %v0 = invoke i32 (...) @foo(i32 10) [ "foo"(i32 20) ] |
| to label %normal unwind label %exception |
| |
| normal: |
| ret i32 %v0 |
| |
| exception: |
| %cleanup = landingpad i8 cleanup |
| ret i32 0 |
| } |
| |
| define i32 @g.invoke() personality i8 3 { |
| ; CHECK-LABEL: @g.invoke( |
| entry: |
| ; CHECK: %v0 = invoke i32 (...) @foo() [ "foo"(i32 10, i32 20) ] |
| %v0 = invoke i32 (...) @foo() [ "foo"(i32 10, i32 20) ] |
| to label %normal unwind label %exception |
| |
| normal: |
| ret i32 %v0 |
| |
| exception: |
| %cleanup = landingpad i8 cleanup |
| ret i32 0 |
| } |