blob: 0ba93d29117a02b6ee0a172272d3e59452b56f63 [file] [log] [blame]
Matt Arsenaultee364ee2014-01-31 00:09:00 +00001; RUN: opt -S -simplifycfg -phi-node-folding-threshold=2 < %s | FileCheck %s
2
3declare float @llvm.sqrt.f32(float) nounwind readonly
4declare float @llvm.fma.f32(float, float, float) nounwind readonly
5declare float @llvm.fmuladd.f32(float, float, float) nounwind readonly
Matt Arsenault85cbc7e2014-08-29 16:01:17 +00006declare float @llvm.fabs.f32(float) nounwind readonly
Matt Arsenaultd6511b42014-10-21 23:00:20 +00007declare float @llvm.minnum.f32(float, float) nounwind readonly
8declare float @llvm.maxnum.f32(float, float) nounwind readonly
Matt Arsenaultee364ee2014-01-31 00:09:00 +00009
10; CHECK-LABEL: @sqrt_test(
11; CHECK: select
12define void @sqrt_test(float addrspace(1)* noalias nocapture %out, float %a) nounwind {
13entry:
14 %cmp.i = fcmp olt float %a, 0.000000e+00
15 br i1 %cmp.i, label %test_sqrt.exit, label %cond.else.i
16
17cond.else.i: ; preds = %entry
18 %0 = tail call float @llvm.sqrt.f32(float %a) nounwind readnone
19 br label %test_sqrt.exit
20
21test_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
Matt Arsenault85cbc7e2014-08-29 16:01:17 +000027; CHECK-LABEL: @fabs_test(
28; CHECK: select
29define void @fabs_test(float addrspace(1)* noalias nocapture %out, float %a) nounwind {
30entry:
31 %cmp.i = fcmp olt float %a, 0.000000e+00
32 br i1 %cmp.i, label %test_fabs.exit, label %cond.else.i
33
34cond.else.i: ; preds = %entry
35 %0 = tail call float @llvm.fabs.f32(float %a) nounwind readnone
36 br label %test_fabs.exit
37
38test_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}
Matt Arsenaultee364ee2014-01-31 00:09:00 +000043
44; CHECK-LABEL: @fma_test(
45; CHECK: select
46define void @fma_test(float addrspace(1)* noalias nocapture %out, float %a, float %b, float %c) nounwind {
47entry:
48 %cmp.i = fcmp olt float %a, 0.000000e+00
49 br i1 %cmp.i, label %test_fma.exit, label %cond.else.i
50
51cond.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
55test_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
63define void @fmuladd_test(float addrspace(1)* noalias nocapture %out, float %a, float %b, float %c) nounwind {
64entry:
65 %cmp.i = fcmp olt float %a, 0.000000e+00
66 br i1 %cmp.i, label %test_fmuladd.exit, label %cond.else.i
67
68cond.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
72test_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
Matt Arsenaultd6511b42014-10-21 23:00:20 +000078; CHECK-LABEL: @minnum_test(
79; CHECK: select
80define void @minnum_test(float addrspace(1)* noalias nocapture %out, float %a, float %b) nounwind {
81entry:
82 %cmp.i = fcmp olt float %a, 0.000000e+00
83 br i1 %cmp.i, label %test_minnum.exit, label %cond.else.i
84
85cond.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
89test_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
97define void @maxnum_test(float addrspace(1)* noalias nocapture %out, float %a, float %b) nounwind {
98entry:
99 %cmp.i = fcmp olt float %a, 0.000000e+00
100 br i1 %cmp.i, label %test_maxnum.exit, label %cond.else.i
101
102cond.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
106test_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}