| Index: tests_lit/llvm2ice_tests/fp.cmp.ll
|
| diff --git a/tests_lit/llvm2ice_tests/fp.cmp.ll b/tests_lit/llvm2ice_tests/fp.cmp.ll
|
| index f08b908c684a5c671c0cafc7e724151957c95f95..7e566bdcd7cee45aab5232c850098c9975ee90ab 100644
|
| --- a/tests_lit/llvm2ice_tests/fp.cmp.ll
|
| +++ b/tests_lit/llvm2ice_tests/fp.cmp.ll
|
| @@ -6,6 +6,16 @@
|
| ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 | FileCheck %s
|
| ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 | FileCheck %s
|
|
|
| +; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \
|
| +; RUN: --target arm32 -i %s --args -O2 --skip-unimplemented \
|
| +; RUN: | %if --need=allow_dump --need=target_ARM32 --command FileCheck %s \
|
| +; RUN: --check-prefix=ARM32
|
| +
|
| +; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \
|
| +; RUN: --target arm32 -i %s --args -Om1 --skip-unimplemented \
|
| +; RUN: | %if --need=allow_dump --need=target_ARM32 --command FileCheck %s \
|
| +; RUN: --check-prefix=ARM32
|
| +
|
| define internal void @fcmpEq(float %a, float %b, double %c, double %d) {
|
| entry:
|
| %cmp = fcmp oeq float %a, %b
|
| @@ -35,6 +45,15 @@ if.end3: ; preds = %if.then2, %if.end
|
| ; CHECK: jne
|
| ; CHECK-NEXT: jp
|
| ; CHECK: call {{.*}} R_{{.*}} func
|
| +; ARM32-LABEL: fcmpEq
|
| +; ARM32: vcmp.f32
|
| +; ARM32: mov [[R0:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: moveq [[R0]], #1
|
| +; ARM32: vcmp.f64
|
| +; ARM32: mov [[R1:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: moveq [[R1]], #1
|
|
|
| declare void @func()
|
|
|
| @@ -67,6 +86,15 @@ if.end3: ; preds = %if.then2, %if.end
|
| ; CHECK: jne
|
| ; CHECK-NEXT: jp
|
| ; CHECK: call {{.*}} R_{{.*}} func
|
| +; ARM32-LABEL: fcmpNe
|
| +; ARM32: vcmp.f32
|
| +; ARM32: mov [[R0:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movne [[R0]], #1
|
| +; ARM32: vcmp.f64
|
| +; ARM32: mov [[R1:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movne [[R1]], #1
|
|
|
| define internal void @fcmpGt(float %a, float %b, double %c, double %d) {
|
| entry:
|
| @@ -95,6 +123,15 @@ if.end3: ; preds = %if.then2, %if.end
|
| ; CHECK: ucomisd
|
| ; CHECK: seta
|
| ; CHECK: call {{.*}} R_{{.*}} func
|
| +; ARM32-LABEL: fcmpGt
|
| +; ARM32: vcmp.f32
|
| +; ARM32: mov [[R0:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movgt [[R0]], #1
|
| +; ARM32: vcmp.f64
|
| +; ARM32: mov [[R1:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movgt [[R1]], #1
|
|
|
| define internal void @fcmpGe(float %a, float %b, double %c, double %d) {
|
| entry:
|
| @@ -123,6 +160,15 @@ if.end3: ; preds = %if.end, %if.then2
|
| ; CHECK: ucomisd
|
| ; CHECK: setb
|
| ; CHECK: call {{.*}} R_{{.*}} func
|
| +; ARM32-LABEL: fcmpGe
|
| +; ARM32: vcmp.f32
|
| +; ARM32: mov [[R0:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movlt [[R0]], #1
|
| +; ARM32: vcmp.f64
|
| +; ARM32: mov [[R1:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movlt [[R1]], #1
|
|
|
| define internal void @fcmpLt(float %a, float %b, double %c, double %d) {
|
| entry:
|
| @@ -151,6 +197,15 @@ if.end3: ; preds = %if.then2, %if.end
|
| ; CHECK: ucomisd
|
| ; CHECK: seta
|
| ; CHECK: call {{.*}} R_{{.*}} func
|
| +; ARM32-LABEL: fcmpLt
|
| +; ARM32: vcmp.f32
|
| +; ARM32: mov [[R0:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movmi [[R0]], #1
|
| +; ARM32: vcmp.f64
|
| +; ARM32: mov [[R1:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movmi [[R1]], #1
|
|
|
| define internal void @fcmpLe(float %a, float %b, double %c, double %d) {
|
| entry:
|
| @@ -179,6 +234,15 @@ if.end3: ; preds = %if.end, %if.then2
|
| ; CHECK: ucomisd
|
| ; CHECK: setb
|
| ; CHECK: call {{.*}} R_{{.*}} func
|
| +; ARM32-LABEL: fcmpLe
|
| +; ARM32: vcmp.f32
|
| +; ARM32: mov [[R0:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movhi [[R0]], #1
|
| +; ARM32: vcmp.f64
|
| +; ARM32: mov [[R1:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movhi [[R1]], #1
|
|
|
| define internal i32 @fcmpFalseFloat(float %a, float %b) {
|
| entry:
|
| @@ -188,6 +252,9 @@ entry:
|
| }
|
| ; CHECK-LABEL: fcmpFalseFloat
|
| ; CHECK: mov {{.*}},0x0
|
| +; ARM32-LABEL: fcmpFalseFloat
|
| +; ARM32: vcmp.f32
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
|
|
| define internal i32 @fcmpFalseDouble(double %a, double %b) {
|
| entry:
|
| @@ -197,6 +264,9 @@ entry:
|
| }
|
| ; CHECK-LABEL: fcmpFalseDouble
|
| ; CHECK: mov {{.*}},0x0
|
| +; ARM32-LABEL: fcmpFalseDouble
|
| +; ARM32: vcmp.f64
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
|
|
| define internal i32 @fcmpOeqFloat(float %a, float %b) {
|
| entry:
|
| @@ -208,6 +278,11 @@ entry:
|
| ; CHECK: ucomiss
|
| ; CHECK: jne
|
| ; CHECK: jp
|
| +; ARM32-LABEL: fcmpOeqFloat
|
| +; ARM32: vcmp.f32
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: moveq [[R]], #1
|
|
|
| define internal i32 @fcmpOeqDouble(double %a, double %b) {
|
| entry:
|
| @@ -219,6 +294,11 @@ entry:
|
| ; CHECK: ucomisd
|
| ; CHECK: jne
|
| ; CHECK: jp
|
| +; ARM32-LABEL: fcmpOeqDouble
|
| +; ARM32: vcmp.f64
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: moveq [[R]], #1
|
|
|
| define internal i32 @fcmpOgtFloat(float %a, float %b) {
|
| entry:
|
| @@ -229,6 +309,11 @@ entry:
|
| ; CHECK-LABEL: fcmpOgtFloat
|
| ; CHECK: ucomiss
|
| ; CHECK: seta
|
| +; ARM32-LABEL: fcmpOgtFloat
|
| +; ARM32: vcmp.f32
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movgt [[R]], #1
|
|
|
| define internal i32 @fcmpOgtDouble(double %a, double %b) {
|
| entry:
|
| @@ -239,6 +324,11 @@ entry:
|
| ; CHECK-LABEL: fcmpOgtDouble
|
| ; CHECK: ucomisd
|
| ; CHECK: seta
|
| +; ARM32-LABEL: fcmpOgtDouble
|
| +; ARM32: vcmp.f64
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movgt [[R]], #1
|
|
|
| define internal i32 @fcmpOgeFloat(float %a, float %b) {
|
| entry:
|
| @@ -249,6 +339,11 @@ entry:
|
| ; CHECK-LABEL: fcmpOgeFloat
|
| ; CHECK: ucomiss
|
| ; CHECK: setae
|
| +; ARM32-LABEL: fcmpOgeFloat
|
| +; ARM32: vcmp.f32
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movge [[R]], #1
|
|
|
| define internal i32 @fcmpOgeDouble(double %a, double %b) {
|
| entry:
|
| @@ -259,6 +354,11 @@ entry:
|
| ; CHECK-LABEL: fcmpOgeDouble
|
| ; CHECK: ucomisd
|
| ; CHECK: setae
|
| +; ARM32-LABEL: fcmpOgeDouble
|
| +; ARM32: vcmp.f64
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movge [[R]], #1
|
|
|
| define internal i32 @fcmpOltFloat(float %a, float %b) {
|
| entry:
|
| @@ -269,6 +369,11 @@ entry:
|
| ; CHECK-LABEL: fcmpOltFloat
|
| ; CHECK: ucomiss
|
| ; CHECK: seta
|
| +; ARM32-LABEL: fcmpOltFloat
|
| +; ARM32: vcmp.f32
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movmi [[R]], #1
|
|
|
| define internal i32 @fcmpOltDouble(double %a, double %b) {
|
| entry:
|
| @@ -279,6 +384,11 @@ entry:
|
| ; CHECK-LABEL: fcmpOltDouble
|
| ; CHECK: ucomisd
|
| ; CHECK: seta
|
| +; ARM32-LABEL: fcmpOltDouble
|
| +; ARM32: vcmp.f64
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movmi [[R]], #1
|
|
|
| define internal i32 @fcmpOleFloat(float %a, float %b) {
|
| entry:
|
| @@ -289,6 +399,11 @@ entry:
|
| ; CHECK-LABEL: fcmpOleFloat
|
| ; CHECK: ucomiss
|
| ; CHECK: setae
|
| +; ARM32-LABEL: fcmpOleFloat
|
| +; ARM32: vcmp.f32
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movls [[R]], #1
|
|
|
| define internal i32 @fcmpOleDouble(double %a, double %b) {
|
| entry:
|
| @@ -299,6 +414,11 @@ entry:
|
| ; CHECK-LABEL: fcmpOleDouble
|
| ; CHECK: ucomisd
|
| ; CHECK: setae
|
| +; ARM32-LABEL: fcmpOleDouble
|
| +; ARM32: vcmp.f64
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movls [[R]], #1
|
|
|
| define internal i32 @fcmpOneFloat(float %a, float %b) {
|
| entry:
|
| @@ -309,6 +429,12 @@ entry:
|
| ; CHECK-LABEL: fcmpOneFloat
|
| ; CHECK: ucomiss
|
| ; CHECK: setne
|
| +; ARM32-LABEL: fcmpOneFloat
|
| +; ARM32: vcmp.f32
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movmi [[R]], #1
|
| +; ARM32: movgt [[R]], #1
|
|
|
| define internal i32 @fcmpOneDouble(double %a, double %b) {
|
| entry:
|
| @@ -319,6 +445,12 @@ entry:
|
| ; CHECK-LABEL: fcmpOneDouble
|
| ; CHECK: ucomisd
|
| ; CHECK: setne
|
| +; ARM32-LABEL: fcmpOneDouble
|
| +; ARM32: vcmp.f64
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movmi [[R]], #1
|
| +; ARM32: movgt [[R]], #1
|
|
|
| define internal i32 @fcmpOrdFloat(float %a, float %b) {
|
| entry:
|
| @@ -329,6 +461,11 @@ entry:
|
| ; CHECK-LABEL: fcmpOrdFloat
|
| ; CHECK: ucomiss
|
| ; CHECK: setnp
|
| +; ARM32-LABEL: fcmpOrdFloat
|
| +; ARM32: vcmp.f32
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movvc [[R]], #1
|
|
|
| define internal i32 @fcmpOrdDouble(double %a, double %b) {
|
| entry:
|
| @@ -339,6 +476,11 @@ entry:
|
| ; CHECK-LABEL: fcmpOrdDouble
|
| ; CHECK: ucomisd
|
| ; CHECK: setnp
|
| +; ARM32-LABEL: fcmpOrdDouble
|
| +; ARM32: vcmp.f64
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movvc [[R]], #1
|
|
|
| define internal i32 @fcmpUeqFloat(float %a, float %b) {
|
| entry:
|
| @@ -349,6 +491,12 @@ entry:
|
| ; CHECK-LABEL: fcmpUeqFloat
|
| ; CHECK: ucomiss
|
| ; CHECK: sete
|
| +; ARM32-LABEL: fcmpUeqFloat
|
| +; ARM32: vcmp.f32
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: moveq [[R]], #1
|
| +; ARM32: movvs [[R]], #1
|
|
|
| define internal i32 @fcmpUeqDouble(double %a, double %b) {
|
| entry:
|
| @@ -359,6 +507,12 @@ entry:
|
| ; CHECK-LABEL: fcmpUeqDouble
|
| ; CHECK: ucomisd
|
| ; CHECK: sete
|
| +; ARM32-LABEL: fcmpUeqDouble
|
| +; ARM32: vcmp.f64
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: moveq [[R]], #1
|
| +; ARM32: movvs [[R]], #1
|
|
|
| define internal i32 @fcmpUgtFloat(float %a, float %b) {
|
| entry:
|
| @@ -369,6 +523,11 @@ entry:
|
| ; CHECK-LABEL: fcmpUgtFloat
|
| ; CHECK: ucomiss
|
| ; CHECK: setb
|
| +; ARM32-LABEL: fcmpUgtFloat
|
| +; ARM32: vcmp.f32
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movhi [[R]], #1
|
|
|
| define internal i32 @fcmpUgtDouble(double %a, double %b) {
|
| entry:
|
| @@ -379,6 +538,11 @@ entry:
|
| ; CHECK-LABEL: fcmpUgtDouble
|
| ; CHECK: ucomisd
|
| ; CHECK: setb
|
| +; ARM32-LABEL: fcmpUgtDouble
|
| +; ARM32: vcmp.f64
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movhi [[R]], #1
|
|
|
| define internal i32 @fcmpUgeFloat(float %a, float %b) {
|
| entry:
|
| @@ -389,6 +553,11 @@ entry:
|
| ; CHECK-LABEL: fcmpUgeFloat
|
| ; CHECK: ucomiss
|
| ; CHECK: setbe
|
| +; ARM32-LABEL: fcmpUgeFloat
|
| +; ARM32: vcmp.f32
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movpl [[R]], #1
|
|
|
| define internal i32 @fcmpUgeDouble(double %a, double %b) {
|
| entry:
|
| @@ -399,6 +568,11 @@ entry:
|
| ; CHECK-LABEL: fcmpUgeDouble
|
| ; CHECK: ucomisd
|
| ; CHECK: setbe
|
| +; ARM32-LABEL: fcmpUgeDouble
|
| +; ARM32: vcmp.f64
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movpl [[R]], #1
|
|
|
| define internal i32 @fcmpUltFloat(float %a, float %b) {
|
| entry:
|
| @@ -409,6 +583,11 @@ entry:
|
| ; CHECK-LABEL: fcmpUltFloat
|
| ; CHECK: ucomiss
|
| ; CHECK: setb
|
| +; ARM32-LABEL: fcmpUltFloat
|
| +; ARM32: vcmp.f32
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movlt [[R]], #1
|
|
|
| define internal i32 @fcmpUltDouble(double %a, double %b) {
|
| entry:
|
| @@ -419,6 +598,11 @@ entry:
|
| ; CHECK-LABEL: fcmpUltDouble
|
| ; CHECK: ucomisd
|
| ; CHECK: setb
|
| +; ARM32-LABEL: fcmpUltDouble
|
| +; ARM32: vcmp.f64
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movlt [[R]], #1
|
|
|
| define internal i32 @fcmpUleFloat(float %a, float %b) {
|
| entry:
|
| @@ -429,6 +613,11 @@ entry:
|
| ; CHECK-LABEL: fcmpUleFloat
|
| ; CHECK: ucomiss
|
| ; CHECK: setbe
|
| +; ARM32-LABEL: fcmpUleFloat
|
| +; ARM32: vcmp.f32
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movle [[R]], #1
|
|
|
| define internal i32 @fcmpUleDouble(double %a, double %b) {
|
| entry:
|
| @@ -439,6 +628,11 @@ entry:
|
| ; CHECK-LABEL: fcmpUleDouble
|
| ; CHECK: ucomisd
|
| ; CHECK: setbe
|
| +; ARM32-LABEL: fcmpUleDouble
|
| +; ARM32: vcmp.f64
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movle [[R]], #1
|
|
|
| define internal i32 @fcmpUneFloat(float %a, float %b) {
|
| entry:
|
| @@ -450,6 +644,11 @@ entry:
|
| ; CHECK: ucomiss
|
| ; CHECK: jne
|
| ; CHECK: jp
|
| +; ARM32-LABEL: fcmpUneFloat
|
| +; ARM32: vcmp.f32
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movne [[R]], #1
|
|
|
| define internal i32 @fcmpUneDouble(double %a, double %b) {
|
| entry:
|
| @@ -461,6 +660,11 @@ entry:
|
| ; CHECK: ucomisd
|
| ; CHECK: jne
|
| ; CHECK: jp
|
| +; ARM32-LABEL: fcmpUneDouble
|
| +; ARM32: vcmp.f64
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movne [[R]], #1
|
|
|
| define internal i32 @fcmpUnoFloat(float %a, float %b) {
|
| entry:
|
| @@ -471,6 +675,11 @@ entry:
|
| ; CHECK-LABEL: fcmpUnoFloat
|
| ; CHECK: ucomiss
|
| ; CHECK: setp
|
| +; ARM32-LABEL: fcmpUnoFloat
|
| +; ARM32: vcmp.f32
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movvs [[R]], #1
|
|
|
| define internal i32 @fcmpUnoDouble(double %a, double %b) {
|
| entry:
|
| @@ -481,6 +690,11 @@ entry:
|
| ; CHECK-LABEL: fcmpUnoDouble
|
| ; CHECK: ucomisd
|
| ; CHECK: setp
|
| +; ARM32-LABEL: fcmpUnoDouble
|
| +; ARM32: vcmp.f64
|
| +; ARM32: mov [[R:r[0-9]+]], #0
|
| +; ARM32: vmrs
|
| +; ARM32: movvs [[R]], #1
|
|
|
| define internal i32 @fcmpTrueFloat(float %a, float %b) {
|
| entry:
|
| @@ -490,6 +704,9 @@ entry:
|
| }
|
| ; CHECK-LABEL: fcmpTrueFloat
|
| ; CHECK: mov {{.*}},0x1
|
| +; ARM32-LABEL: fcmpTrueFloat
|
| +; ARM32: vcmp.f32
|
| +; ARM32: mov [[R]], #1
|
|
|
| define internal i32 @fcmpTrueDouble(double %a, double %b) {
|
| entry:
|
| @@ -499,6 +716,9 @@ entry:
|
| }
|
| ; CHECK-LABEL: fcmpTrueDouble
|
| ; CHECK: mov {{.*}},0x1
|
| +; ARM32-LABEL: fcmpTrueDouble
|
| +; ARM32: vcmp.f64
|
| +; ARM32: mov [[R]], #1
|
|
|
| define internal float @selectFloatVarVar(float %a, float %b) {
|
| entry:
|
| @@ -510,6 +730,10 @@ entry:
|
| ; CHECK: ucomiss
|
| ; CHECK: seta
|
| ; CHECK: fld
|
| +; ARM32-LABEL: selectFloatVarVar
|
| +; ARM32: vcmp.f32
|
| +; ARM32: vmovne.f32 s{{[0-9]+}}
|
| +; ARM32: bx
|
|
|
| define internal double @selectDoubleVarVar(double %a, double %b) {
|
| entry:
|
| @@ -521,3 +745,7 @@ entry:
|
| ; CHECK: ucomisd
|
| ; CHECK: seta
|
| ; CHECK: fld
|
| +; ARM32-LABEL: selectDoubleVarVar
|
| +; ARM32: vcmp.f64
|
| +; ARM32: vmovne.f64 d{{[0-9]+}}
|
| +; ARM32: bx
|
|
|