-; 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
}