blob: a70e8d0aa0ecce1e7c38f834698cf032903e955a [file] [edit]
; RUN: opt -passes=argpromotion -S < %s | FileCheck %s
; ArgumentPromotion promoting a by-ref argument of a `noipa` function.
; If `noipa` is working, argpromotion should NOT promote the pointer argument,
; because it requires inspecting the function body to determine load patterns.
; CHECK: define internal i32 @foo(i32 %p.0.val)
define internal i32 @foo(ptr %p) noinline {
%v = load i32, ptr %p
ret i32 %v
}
; CHECK: define internal i32 @foo_noipa(ptr %p)
define internal i32 @foo_noipa(ptr %p) noipa noinline {
%v = load i32, ptr %p
ret i32 %v
}
define i32 @bar() {
%a = alloca i32
store i32 7, ptr %a
%r = call i32 @foo(ptr %a)
%b = alloca i32
store i32 %r, ptr %b
%s = call i32 @foo_noipa(ptr %b)
ret i32 %s
}