1 ; RUN: opt < %s -instcombine -S | FileCheck %s
3 define float @test1(float %A, float %B, i1 %C) {
5 ;; A*(1 - uitofp i1 C) -> select C, 0, A
6 %cf = uitofp i1 %C to float
7 %mc = fsub float 1.000000e+00, %cf
8 %p1 = fmul fast float %A, %mc
10 ; CHECK-LABEL: @test1(
11 ; CHECK: select i1 %C, float -0.000000e+00, float %A
14 define float @test2(float %A, float %B, i1 %C) {
16 ;; B*(uitofp i1 C) -> select C, B, 0
17 %cf = uitofp i1 %C to float
18 %p2 = fmul fast float %B, %cf
20 ; CHECK-LABEL: @test2(
21 ; CHECK: select i1 %C, float %B, float -0.000000e+00
24 define float @test3(float %A, float %B, i1 %C) {
26 ;; select C, 0, B + select C, A, 0 -> select C, A, B
27 %cf = uitofp i1 %C to float
28 %s1 = select i1 %C, float 0.000000e+00, float %B
29 %s2 = select i1 %C, float %A, float 0.000000e+00
30 %sum = fadd fast float %s1, %s2
32 ; CHECK-LABEL: @test3(
33 ; CHECK: select i1 %C, float %A, float %B
36 define float @test4(float %A, float %B, i1 %C) {
38 ;; B*(uitofp i1 C) + A*(1 - uitofp i1 C) -> select C, A, B
39 %cf = uitofp i1 %C to float
40 %mc = fsub fast float 1.000000e+00, %cf
41 %p1 = fmul fast float %A, %mc
42 %p2 = fmul fast float %B, %cf
43 %s1 = fadd fast float %p2, %p1
45 ; CHECK-LABEL: @test4(
46 ; CHECK: select i1 %C, float %B, float %A
49 define float @test5(float %A, float %B, i1 %C) {
51 ;; A*(1 - uitofp i1 C) + B*(uitofp i1 C) -> select C, A, B
52 %cf = uitofp i1 %C to float
53 %mc = fsub fast float 1.000000e+00, %cf
54 %p1 = fmul fast float %A, %mc
55 %p2 = fmul fast float %B, %cf
56 %s1 = fadd fast float %p1, %p2
58 ; CHECK-LABEL: @test5(
59 ; CHECK: select i1 %C, float %B, float %A
63 define float @test6(float %A, float %B, i32 %C) {
64 %cf = uitofp i32 %C to float
65 %mc = fsub float 1.000000e+00, %cf
66 %p1 = fmul fast float %A, %mc
68 ; CHECK-LABEL: @test6(
72 define float @test7(float %A, float %B, i32 %C) {
73 %cf = uitofp i32 %C to float
74 %p2 = fmul fast float %B, %cf
76 ; CHECK-LABEL: @test7(