xref: /llvm-project/llvm/test/Transforms/FunctionSpecialization/noinline.ll (revision 0d1a91e8f91e364b83f77e597dfb835d70fe9cf9)
1*0d1a91e8SHari Limaye; RUN: opt -S --passes="ipsccp<func-spec>" -funcspec-for-literal-constant=false < %s | FileCheck %s
2c47739b4SMomchil Velikovdefine dso_local i32 @p0(i32 noundef %x) {
3c47739b4SMomchil Velikoventry:
4c47739b4SMomchil Velikov  %add = add nsw i32 %x, 1
5c47739b4SMomchil Velikov  ret i32 %add
6c47739b4SMomchil Velikov}
7c47739b4SMomchil Velikov
8c47739b4SMomchil Velikovdefine dso_local i32 @p1(i32 noundef %x) {
9c47739b4SMomchil Velikoventry:
10c47739b4SMomchil Velikov  %sub = add nsw i32 %x, -1
11c47739b4SMomchil Velikov  ret i32 %sub
12c47739b4SMomchil Velikov}
13c47739b4SMomchil Velikov
14c47739b4SMomchil Velikovdefine internal fastcc i32 @f(i32 noundef %x, ptr nocapture noundef readonly %p) noinline {
15c47739b4SMomchil Velikoventry:
16c47739b4SMomchil Velikov  %call = tail call i32 %p(i32 noundef %x)
17c47739b4SMomchil Velikov  %add = add nsw i32 %call, %x
18c47739b4SMomchil Velikov  ret i32 %add
19c47739b4SMomchil Velikov}
20c47739b4SMomchil Velikov
21c47739b4SMomchil Velikovdefine dso_local i32 @g0(i32 noundef %x) {
22c47739b4SMomchil Velikoventry:
23c47739b4SMomchil Velikov  %call = tail call fastcc i32 @f(i32 noundef %x, ptr noundef nonnull @p0)
24c47739b4SMomchil Velikov  ret i32 %call
25c47739b4SMomchil Velikov}
26c47739b4SMomchil Velikov
27c47739b4SMomchil Velikovdefine dso_local i32 @g1(i32 noundef %x) {
28c47739b4SMomchil Velikoventry:
29c47739b4SMomchil Velikov  %call = tail call fastcc i32 @f(i32 noundef %x, ptr noundef nonnull @p1)
30c47739b4SMomchil Velikov  ret i32 %call
31c47739b4SMomchil Velikov}
32c47739b4SMomchil Velikov
33c47739b4SMomchil Velikov; Check that a noinline function is specialized, even if it's small.
34e15d72adSAlexandros Lamprineas; CHECK: @f.specialized.1
35e15d72adSAlexandros Lamprineas; CHECK: @f.specialized.2
36