Add minnum / maxnum intrinsics
[oota-llvm.git] / test / Transforms / SimplifyCFG / speculate-math.ll
1 ; RUN: opt -S -simplifycfg -phi-node-folding-threshold=2 < %s | FileCheck %s
2
3 declare float @llvm.sqrt.f32(float) nounwind readonly
4 declare float @llvm.fma.f32(float, float, float) nounwind readonly
5 declare float @llvm.fmuladd.f32(float, float, float) nounwind readonly
6 declare float @llvm.fabs.f32(float) nounwind readonly
7 declare float @llvm.minnum.f32(float, float) nounwind readonly
8 declare float @llvm.maxnum.f32(float, float) nounwind readonly
9
10 ; CHECK-LABEL: @sqrt_test(
11 ; CHECK: select
12 define void @sqrt_test(float addrspace(1)* noalias nocapture %out, float %a) nounwind {
13 entry:
14   %cmp.i = fcmp olt float %a, 0.000000e+00
15   br i1 %cmp.i, label %test_sqrt.exit, label %cond.else.i
16
17 cond.else.i:                                      ; preds = %entry
18   %0 = tail call float @llvm.sqrt.f32(float %a) nounwind readnone
19   br label %test_sqrt.exit
20
21 test_sqrt.exit:                                   ; preds = %cond.else.i, %entry
22   %cond.i = phi float [ %0, %cond.else.i ], [ 0x7FF8000000000000, %entry ]
23   store float %cond.i, float addrspace(1)* %out, align 4
24   ret void
25 }
26
27 ; CHECK-LABEL: @fabs_test(
28 ; CHECK: select
29 define void @fabs_test(float addrspace(1)* noalias nocapture %out, float %a) nounwind {
30 entry:
31   %cmp.i = fcmp olt float %a, 0.000000e+00
32   br i1 %cmp.i, label %test_fabs.exit, label %cond.else.i
33
34 cond.else.i:                                      ; preds = %entry
35   %0 = tail call float @llvm.fabs.f32(float %a) nounwind readnone
36   br label %test_fabs.exit
37
38 test_fabs.exit:                                   ; preds = %cond.else.i, %entry
39   %cond.i = phi float [ %0, %cond.else.i ], [ 0x7FF8000000000000, %entry ]
40   store float %cond.i, float addrspace(1)* %out, align 4
41   ret void
42 }
43
44 ; CHECK-LABEL: @fma_test(
45 ; CHECK: select
46 define void @fma_test(float addrspace(1)* noalias nocapture %out, float %a, float %b, float %c) nounwind {
47 entry:
48   %cmp.i = fcmp olt float %a, 0.000000e+00
49   br i1 %cmp.i, label %test_fma.exit, label %cond.else.i
50
51 cond.else.i:                                      ; preds = %entry
52   %0 = tail call float @llvm.fma.f32(float %a, float %b, float %c) nounwind readnone
53   br label %test_fma.exit
54
55 test_fma.exit:                                   ; preds = %cond.else.i, %entry
56   %cond.i = phi float [ %0, %cond.else.i ], [ 0x7FF8000000000000, %entry ]
57   store float %cond.i, float addrspace(1)* %out, align 4
58   ret void
59 }
60
61 ; CHECK-LABEL: @fmuladd_test(
62 ; CHECK: select
63 define void @fmuladd_test(float addrspace(1)* noalias nocapture %out, float %a, float %b, float %c) nounwind {
64 entry:
65   %cmp.i = fcmp olt float %a, 0.000000e+00
66   br i1 %cmp.i, label %test_fmuladd.exit, label %cond.else.i
67
68 cond.else.i:                                      ; preds = %entry
69   %0 = tail call float @llvm.fmuladd.f32(float %a, float %b, float %c) nounwind readnone
70   br label %test_fmuladd.exit
71
72 test_fmuladd.exit:                                   ; preds = %cond.else.i, %entry
73   %cond.i = phi float [ %0, %cond.else.i ], [ 0x7FF8000000000000, %entry ]
74   store float %cond.i, float addrspace(1)* %out, align 4
75   ret void
76 }
77
78 ; CHECK-LABEL: @minnum_test(
79 ; CHECK: select
80 define void @minnum_test(float addrspace(1)* noalias nocapture %out, float %a, float %b) nounwind {
81 entry:
82   %cmp.i = fcmp olt float %a, 0.000000e+00
83   br i1 %cmp.i, label %test_minnum.exit, label %cond.else.i
84
85 cond.else.i:                                      ; preds = %entry
86   %0 = tail call float @llvm.minnum.f32(float %a, float %b) nounwind readnone
87   br label %test_minnum.exit
88
89 test_minnum.exit:                                   ; preds = %cond.else.i, %entry
90   %cond.i = phi float [ %0, %cond.else.i ], [ 0x7FF8000000000000, %entry ]
91   store float %cond.i, float addrspace(1)* %out, align 4
92   ret void
93 }
94
95 ; CHECK-LABEL: @maxnum_test(
96 ; CHECK: select
97 define void @maxnum_test(float addrspace(1)* noalias nocapture %out, float %a, float %b) nounwind {
98 entry:
99   %cmp.i = fcmp olt float %a, 0.000000e+00
100   br i1 %cmp.i, label %test_maxnum.exit, label %cond.else.i
101
102 cond.else.i:                                      ; preds = %entry
103   %0 = tail call float @llvm.maxnum.f32(float %a, float %b) nounwind readnone
104   br label %test_maxnum.exit
105
106 test_maxnum.exit:                                   ; preds = %cond.else.i, %entry
107   %cond.i = phi float [ %0, %cond.else.i ], [ 0x7FF8000000000000, %entry ]
108   store float %cond.i, float addrspace(1)* %out, align 4
109   ret void
110 }