[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / Transforms / FunctionSpecialization / get-possible-constants.ll
blobdfa1e5a42776a5f7d9ee04dc974f1514a0186faf
1 ; RUN: opt -S --passes="ipsccp<func-spec>" < %s | FileCheck %s
2 define dso_local i32 @p0(i32 noundef %x) {
3 entry:
4   %add = add nsw i32 %x, 1
5   ret i32 %add
8 define dso_local i32 @p1(i32 noundef %x) {
9 entry:
10   %sub = add nsw i32 %x, -1
11   ret i32 %sub
14 ; CHECK-LABEL: define dso_local i32 @f0
15 ; CHECK:       tail call fastcc i32 @g.specialized.[[#A:]]({{.*}}@p0)
17 define dso_local i32 @f0(i32 noundef %x) {
18 entry:
19   %call = tail call fastcc i32 @g(i32 noundef %x, ptr noundef nonnull @p0)
20   ret i32 %call
23 ; CHECK-LABEL: define dso_local i32 @f1
24 ; CHECK:       tail call fastcc i32 @g.specialized.[[#B:]]({{.*}}@p1)
26 define dso_local i32 @f1(i32 noundef %x) {
27 entry:
28   %call = tail call fastcc i32 @g(i32 noundef %x, ptr noundef nonnull @p1)
29   ret i32 %call
32 ; @g gets fully specialized
33 ; CHECK-NOT: define internal fastcc i32 @g(
35 define internal fastcc i32 @g(i32 noundef %x, ptr nocapture noundef readonly %p) noinline  {
36 entry:
37   %pcall = tail call i32 %p(i32 noundef %x)
38   %fcall = tail call fastcc i32 @f(i32 noundef %pcall, ptr noundef nonnull %p)
39   ret i32 %fcall
42 ; CHECK-LABEL: define dso_local i32 @g0
43 ; CHECK:       tail call fastcc i32 @f.specialized.[[#C:]]({{.*}}@p0)
45 define dso_local i32 @g0(i32 noundef %x) {
46 entry:
47   %call = tail call fastcc i32 @f(i32 noundef %x, ptr noundef nonnull @p0)
48   ret i32 %call
51 define internal fastcc i32 @f(i32 noundef %x, ptr nocapture noundef readonly %p) noinline  {
52 entry:
53   %call = tail call i32 %p(i32 noundef %x)
54   %add = add nsw i32 %call, %x
55   ret i32 %add
58 ; CHECK-LABEL: define dso_local i32 @g1
59 ; CHECK:       tail call fastcc i32 @f.specialized.[[#D:]]({{.*}}@p1)
61 define dso_local i32 @g1(i32 noundef %x) {
62 entry:
63   %call = tail call fastcc i32 @f(i32 noundef %x, ptr noundef nonnull @p1)
64   ret i32 %call
67 define dso_local i32 @g2(i32 noundef %x) {
68 entry:
69   %call = tail call fastcc i32 @f(i32 noundef %x, ptr poison)
70   ret i32 %call
73 ; Check that a single argument, that cannot be used for specialisation, does not
74 ; prevent specialisation based on other arguments.
76 ; Also check that for callsites which reside in the body of newly created
77 ; (specialized) functions, the lattice value of the arguments is known.
79 ; CHECK-DAG: define internal fastcc i32 @g.specialized.[[#A]]
80 ; CHECK-DAG: define internal fastcc i32 @g.specialized.[[#B]]
81 ; CHECK-DAG: define internal fastcc i32 @f.specialized.[[#C]]
82 ; CHECK-DAG: define internal fastcc i32 @f.specialized.[[#D]]