blob: d1fa274f7808f45abf6de6819ee2147a014181c9 [file] [edit]
; RUN: opt -passes=mergefunc -S < %s | FileCheck %s
; MergeFunctions merging a `noipa` function with an identical one.
; If `noipa` is working, MergeFunctions should NOT merge
; @foo_noipa into @baz_noipa (or vice versa), because it inspects
; the function definitions.
; CHECK-NOT: define internal i32 @foo(
define internal i32 @foo(i32 %x, i32 %y) noinline {
%sum = add i32 %x, %y
%mul = mul i32 %sum, %x
%sub = sub i32 %mul, %y
ret i32 %sub
}
; CHECK: define internal i32 @baz(
define internal i32 @baz(i32 %x, i32 %y) noinline {
%sum = add i32 %x, %y
%mul = mul i32 %sum, %x
%sub = sub i32 %mul, %y
ret i32 %sub
}
; CHECK: define internal i32 @foo_noipa(
define internal i32 @foo_noipa(i32 %x, i32 %y) noipa noinline {
%sum = add i32 %x, %y
%mul = mul i32 %sum, %x
%sub = sub i32 %mul, %y
ret i32 %sub
}
; CHECK: define internal i32 @baz_noipa(
define internal i32 @baz_noipa(i32 %x, i32 %y) noipa noinline {
%sum = add i32 %x, %y
%mul = mul i32 %sum, %x
%sub = sub i32 %mul, %y
ret i32 %sub
}
define i32 @bar() {
; CHECK: call i32 @baz(
%r1 = call i32 @foo(i32 1, i32 2)
; CHECK: call i32 @baz(
%r2 = call i32 @baz(i32 3, i32 4)
; CHECK: call i32 @foo_noipa(
%r3 = call i32 @foo_noipa(i32 1, i32 2)
; CHECK: call i32 @baz_noipa(
%r4 = call i32 @baz_noipa(i32 3, i32 4)
%res1 = add i32 %r1, %r2
%res2 = add i32 %r3, %r4
%res3 = add i32 %res1, %res2
ret i32 %res3
}