[ARM] Split large truncating MVE stores
[llvm-complete.git] / test / Feature / OperandBundles / merge-func.ll
blob1fa6eb093084225ce335093afbdadd795e5c3e48
1 ; RUN: opt -S -mergefunc < %s | FileCheck %s
3 ; Minor note: functions need to be at least three instructions long
4 ; to be considered by -mergefunc.
6 declare i32 @foo(...)
8 define 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) ]
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) ]
19   ret i32 %v2
22 define 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) ]
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) ]
33   ret i32 %v2
36 define 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 %exception
43  normal:
44   ret i32 %v0
46  exception:
47   %cleanup = landingpad i8 cleanup
48   ret i32 0
51 define 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 %exception
58  normal:
59   ret i32 %v0
61  exception:
62   %cleanup = landingpad i8 cleanup
63   ret i32 0