xref: /minix3/external/bsd/llvm/dist/llvm/test/Transforms/InstCombine/2008-11-08-FCmp.ll (revision b5e2faaaaf60a8b9a02f8d72f64caa56a87eb312)
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
49; Check that optimizing unsigned >= comparisons correctly distinguishes
50; positive and negative constants.  <rdar://problem/12029145>
51define i1 @test7(i32 %val) {
52  %1 = uitofp i32 %val to double
53  %2 = fcmp oge double %1, 3.200000e+00
54  ret i1 %2
55; CHECK: icmp ugt i32 %val, 3
56}
57