+
+; rdar://12753946: x * cond ? 1.0 : 0.0 => cond ? x : 0.0
+define double @select1(i32 %cond, double %x, double %y) {
+ %tobool = icmp ne i32 %cond, 0
+ %cond1 = select i1 %tobool, double 1.000000e+00, double 0.000000e+00
+ %mul = fmul nnan nsz double %cond1, %x
+ %add = fadd double %mul, %y
+ ret double %add
+; CHECK: @select1
+; CHECK: select i1 %tobool, double %x, double 0.000000e+00
+}
+
+define double @select2(i32 %cond, double %x, double %y) {
+ %tobool = icmp ne i32 %cond, 0
+ %cond1 = select i1 %tobool, double 0.000000e+00, double 1.000000e+00
+ %mul = fmul nnan nsz double %cond1, %x
+ %add = fadd double %mul, %y
+ ret double %add
+; CHECK: @select2
+; CHECK: select i1 %tobool, double 0.000000e+00, double %x
+}
+
+define double @select3(i32 %cond, double %x, double %y) {
+ %tobool = icmp ne i32 %cond, 0
+ %cond1 = select i1 %tobool, double 0.000000e+00, double 2.000000e+00
+ %mul = fmul nnan nsz double %cond1, %x
+ %add = fadd double %mul, %y
+ ret double %add
+; CHECK: @select3
+; CHECK: fmul nnan nsz double %cond1, %x
+}