Switch lowering: extract jump tables and bit tests before building binary tree (PR22262)
[oota-llvm.git] / test / CodeGen / ARM / fpcmp.ll
index 61dc489356e2680b1a3e4f19649a6adbfdada3d5..e3ffd45a396d868399b28b301f016df0e247d4a7 100644 (file)
@@ -1,58 +1,71 @@
-; RUN: llvm-as < %s | llc -march=arm &&
-; RUN: llvm-as < %s | llc -march=arm  | grep movmi &&
-; RUN: llvm-as < %s | llc -march=arm  | grep moveq &&
-; RUN: llvm-as < %s | llc -march=arm  | grep movgt &&
-; RUN: llvm-as < %s | llc -march=arm  | grep movge &&
-; RUN: llvm-as < %s | llc -march=arm  | grep movls &&
-; RUN: llvm-as < %s | llc -march=arm  | grep movne &&
-; RUN: llvm-as < %s | llc -march=arm  | grep fcmps &&
-; RUN: llvm-as < %s | llc -march=arm  | grep fcmpd
+; RUN: llc -mtriple=arm-eabi -mattr=+vfp2 %s -o - | FileCheck %s
 
-int %f1(float %a) {
+define i32 @f1(float %a) {
+;CHECK-LABEL: f1:
+;CHECK: vcmpe.f32
+;CHECK: movmi
 entry:
-       %tmp = setlt float %a, 1.000000e+00             ; <bool> [#uses=1]
-       %tmp = cast bool %tmp to int            ; <int> [#uses=1]
-       ret int %tmp
+        %tmp = fcmp olt float %a, 1.000000e+00          ; <i1> [#uses=1]
+        %tmp1 = zext i1 %tmp to i32              ; <i32> [#uses=1]
+        ret i32 %tmp1
 }
 
-int %f2(float %a) {
+define i32 @f2(float %a) {
+;CHECK-LABEL: f2:
+;CHECK: vcmpe.f32
+;CHECK: moveq
 entry:
-       %tmp = seteq float %a, 1.000000e+00             ; <bool> [#uses=1]
-       %tmp = cast bool %tmp to int            ; <int> [#uses=1]
-       ret int %tmp
+        %tmp = fcmp oeq float %a, 1.000000e+00          ; <i1> [#uses=1]
+        %tmp2 = zext i1 %tmp to i32              ; <i32> [#uses=1]
+        ret i32 %tmp2
 }
 
-int %f3(float %a) {
+define i32 @f3(float %a) {
+;CHECK-LABEL: f3:
+;CHECK: vcmpe.f32
+;CHECK: movgt
 entry:
-       %tmp = setgt float %a, 1.000000e+00             ; <bool> [#uses=1]
-       %tmp = cast bool %tmp to int            ; <int> [#uses=1]
-       ret int %tmp
+        %tmp = fcmp ogt float %a, 1.000000e+00          ; <i1> [#uses=1]
+        %tmp3 = zext i1 %tmp to i32              ; <i32> [#uses=1]
+        ret i32 %tmp3
 }
 
-int %f4(float %a) {
+define i32 @f4(float %a) {
+;CHECK-LABEL: f4:
+;CHECK: vcmpe.f32
+;CHECK: movge
 entry:
-       %tmp = setge float %a, 1.000000e+00             ; <bool> [#uses=1]
-       %tmp = cast bool %tmp to int            ; <int> [#uses=1]
-       ret int %tmp
+        %tmp = fcmp oge float %a, 1.000000e+00          ; <i1> [#uses=1]
+        %tmp4 = zext i1 %tmp to i32              ; <i32> [#uses=1]
+        ret i32 %tmp4
 }
 
-int %f5(float %a) {
+define i32 @f5(float %a) {
+;CHECK-LABEL: f5:
+;CHECK: vcmpe.f32
+;CHECK: movls
 entry:
-       %tmp = setle float %a, 1.000000e+00             ; <bool> [#uses=1]
-       %tmp = cast bool %tmp to int            ; <int> [#uses=1]
-       ret int %tmp
+        %tmp = fcmp ole float %a, 1.000000e+00          ; <i1> [#uses=1]
+        %tmp5 = zext i1 %tmp to i32              ; <i32> [#uses=1]
+        ret i32 %tmp5
 }
 
-int %f6(float %a) {
+define i32 @f6(float %a) {
+;CHECK-LABEL: f6:
+;CHECK: vcmpe.f32
+;CHECK: movne
 entry:
-       %tmp = setne float %a, 1.000000e+00             ; <bool> [#uses=1]
-       %tmp = cast bool %tmp to int            ; <int> [#uses=1]
-       ret int %tmp
+        %tmp = fcmp une float %a, 1.000000e+00          ; <i1> [#uses=1]
+        %tmp6 = zext i1 %tmp to i32              ; <i32> [#uses=1]
+        ret i32 %tmp6
 }
 
-int %g1(double %a) {
+define i32 @g1(double %a) {
+;CHECK-LABEL: g1:
+;CHECK: vcmpe.f64
+;CHECK: movmi
 entry:
-       %tmp = setlt double %a, 1.000000e+00            ; <bool> [#uses=1]
-       %tmp = cast bool %tmp to int            ; <int> [#uses=1]
-       ret int %tmp
+        %tmp = fcmp olt double %a, 1.000000e+00         ; <i1> [#uses=1]
+        %tmp7 = zext i1 %tmp to i32              ; <i32> [#uses=1]
+        ret i32 %tmp7
 }