1; RUN: opt < %s -instcombine -S | FileCheck %s
2; PR3021
3
4; When inst combining an FCMP with the LHS coming from a uitofp instruction, we
5; can't lower it to signed ICMP instructions.
6
7define i1 @test1(i32 %val) {
8  %1 = uitofp i32 %val to double
9  %2 = fcmp ole double %1, 0.000000e+00
10; CHECK: icmp eq i32 %val, 0
11  ret i1 %2
12}
13
14define i1 @test2(i32 %val) {
15  %1 = uitofp i32 %val to double
16  %2 = fcmp olt double %1, 0.000000e+00
17  ret i1 %2
18; CHECK: ret i1 false
19}
20
21define i1 @test3(i32 %val) {
22  %1 = uitofp i32 %val to double
23  %2 = fcmp oge double %1, 0.000000e+00
24  ret i1 %2
25; CHECK: ret i1 true
26}
27
28define i1 @test4(i32 %val) {
29  %1 = uitofp i32 %val to double
30  %2 = fcmp ogt double %1, 0.000000e+00
31; CHECK: icmp ne i32 %val, 0
32  ret i1 %2
33}
34
35define i1 @test5(i32 %val) {
36  %1 = uitofp i32 %val to double
37  %2 = fcmp ogt double %1, -4.400000e+00
38  ret i1 %2
39; CHECK: ret i1 true
40}
41
42define i1 @test6(i32 %val) {
43  %1 = uitofp i32 %val to double
44  %2 = fcmp olt double %1, -4.400000e+00
45  ret i1 %2
46; CHECK: ret i1 false
47}
48