blob: c636288661b1c6f57345e75c7a0d2e6d96460a08 [file] [log] [blame]
Nick Lewyckyb56e1ab2009-09-27 06:25:05 +00001; RUN: opt < %s -instcombine -S | FileCheck %s
Bill Wendling3f547be2008-11-09 04:26:50 +00002; 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
Nick Lewyckyb56e1ab2009-09-27 06:25:05 +000010; CHECK: icmp eq i32 %val, 0
Bill Wendling3f547be2008-11-09 04:26:50 +000011 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
Nick Lewyckyb56e1ab2009-09-27 06:25:05 +000018; CHECK: ret i1 false
Bill Wendling3f547be2008-11-09 04:26:50 +000019}
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
Nick Lewyckyb56e1ab2009-09-27 06:25:05 +000025; CHECK: ret i1 true
Bill Wendling3f547be2008-11-09 04:26:50 +000026}
27
28define i1 @test4(i32 %val) {
29 %1 = uitofp i32 %val to double
30 %2 = fcmp ogt double %1, 0.000000e+00
Nick Lewyckyb56e1ab2009-09-27 06:25:05 +000031; CHECK: icmp ne i32 %val, 0
Bill Wendling3f547be2008-11-09 04:26:50 +000032 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
Nick Lewyckyb56e1ab2009-09-27 06:25:05 +000039; CHECK: ret i1 true
Bill Wendling3f547be2008-11-09 04:26:50 +000040}
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
Nick Lewyckyb56e1ab2009-09-27 06:25:05 +000046; CHECK: ret i1 false
Bill Wendling3f547be2008-11-09 04:26:50 +000047}