Home | History | Annotate | Download | only in OperandBundles
      1 ; RUN: opt -S -mergefunc < %s | FileCheck %s
      2 
      3 ; Minor note: functions need to be at least three instructions long
      4 ; to be considered by -mergefunc.
      5 
      6 declare i32 @foo(...)
      7 
      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) ]
     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 %v2
     20 }
     21 
     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) ]
     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 %v2
     34 }
     35 
     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
     42 
     43  normal:
     44   ret i32 %v0
     45 
     46  exception:
     47   %cleanup = landingpad i8 cleanup
     48   ret i32 0
     49 }
     50 
     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
     57 
     58  normal:
     59   ret i32 %v0
     60 
     61  exception:
     62   %cleanup = landingpad i8 cleanup
     63   ret i32 0
     64 }
     65