Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / Transforms / FunctionSpecialization / function-specialization.ll
blobe1cacce4a7dde20d4c05bf46a5002bd07deb9432
1 ; RUN: opt -passes="ipsccp<func-spec>" -funcspec-min-function-size=3 -S < %s | FileCheck %s
2 ; RUN: opt -passes="ipsccp<no-func-spec>" -funcspec-min-function-size=3 -S < %s | FileCheck %s --check-prefix=NOFSPEC
4 define i64 @main(i64 %x, i1 %flag) {
6 ; CHECK-LABEL: @main(i64 %x, i1 %flag) {
7 ; CHECK:      entry:
8 ; CHECK-NEXT:   br i1 %flag, label %plus, label %minus
9 ; CHECK:      plus:
10 ; CHECK-NEXT:   [[TMP0:%.+]] = call i64 @compute.specialized.1(i64 %x, ptr @plus)
11 ; CHECK-NEXT:   br label %merge
12 ; CHECK:      minus:
13 ; CHECK-NEXT:   [[TMP1:%.+]] = call i64 @compute.specialized.2(i64 %x, ptr @minus)
14 ; CHECK-NEXT:   br label %merge
15 ; CHECK:      merge:
16 ; CHECK-NEXT:   [[TMP2:%.+]] = phi i64 [ [[TMP0]], %plus ], [ [[TMP1]], %minus ]
17 ; CHECK-NEXT:   ret i64 [[TMP2]]
18 ; CHECK-NEXT: }
20 ; NOFSPEC-LABEL: @main(i64 %x, i1 %flag) {
21 ; NOFSPEC-NOT: call i64 @compute.specialized.{{[0-9]+}}(
22 ; NOFSPEC: call i64 @compute(
24 entry:
25   br i1 %flag, label %plus, label %minus
27 plus:
28   %tmp0 = call i64 @compute(i64 %x, ptr @plus)
29   br label %merge
31 minus:
32   %tmp1 = call i64 @compute(i64 %x, ptr @minus)
33   br label %merge
35 merge:
36   %tmp2 = phi i64 [ %tmp0, %plus ], [ %tmp1, %minus]
37   ret i64 %tmp2
40 ; CHECK-NOT: define internal i64 @compute(
42 ; CHECK-LABEL: define internal i64 @compute.specialized.1(i64 %x, ptr %binop) {
43 ; CHECK-NEXT:  entry:
44 ; CHECK-NEXT:    [[TMP0:%.+]] = call i64 @plus(i64 %x)
45 ; CHECK-NEXT:    ret i64 [[TMP0]]
46 ; CHECK-NEXT:  }
48 ; CHECK-LABEL: define internal i64 @compute.specialized.2(i64 %x, ptr %binop) {
49 ; CHECK-NEXT:  entry:
50 ; CHECK-NEXT:    [[TMP0:%.+]] = call i64 @minus(i64 %x)
51 ; CHECK-NEXT:    ret i64 [[TMP0]]
52 ; CHECK-NEXT:  }
54 ; NOFSPEC: define internal i64 @compute(
55 ; NOFSPEC-NOT: define internal i64 @compute.specialized.{{[0-9]+}}(
57 define internal i64 @compute(i64 %x, ptr %binop) {
58 entry:
59   %tmp0 = call i64 %binop(i64 %x)
60   ret i64 %tmp0
63 define internal i64 @plus(i64 %x) {
64 entry:
65   %tmp0 = add i64 %x, 1
66   ret i64 %tmp0
69 define internal i64 @minus(i64 %x) {
70 entry:
71   %tmp0 = sub i64 %x, 1
72   ret i64 %tmp0