f33a1f59f61b290bfa304f0175a172d2a7d82625
[oota-llvm.git] / test / Transforms / InstCombine / 2008-11-08-FCmp.ll
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
7 define 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
14 define 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
21 define 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
28 define 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
35 define 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
42 define 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>
51 define 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 }