1; RUN: opt < %s -instcombine -S | FileCheck %s
2
3; CHECK: select
4; CHECK: select
5
6; Make sure instcombine don't fold select into operands. We don't want to emit
7; select of two integers unless it's selecting 0 / 1.
8
9define i32 @t1(i32 %c, i32 %x) nounwind {
10       %t1 = icmp eq i32 %c, 0
11       %t2 = lshr i32 %x, 18
12       %t3 = select i1 %t1, i32 %t2, i32 %x
13       ret i32 %t3
14}
15
16define i32 @t2(i32 %c, i32 %x) nounwind {
17       %t1 = icmp eq i32 %c, 0
18       %t2 = and i32 %x, 18
19       %t3 = select i1 %t1, i32 %t2, i32 %x
20       ret i32 %t3
21}
22
23define float @t3(float %x, float %y) nounwind {
24  %t1 = fcmp ogt float %x, %y
25  %t2 = select i1 %t1, float %x, float 1.0
26  %t3 = fadd fast float %t2, 1.0
27  ret float %t3
28; CHECK-LABEL: @t3(
29; CHECK: fadd fast
30; CHECK: select
31}
32