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 d41017a3ea2be147e0191b8d3ebabedde749ca5c..427a82c059901b15784eaaa964316d8836b49e29 100644 |
--- a/tests_lit/llvm2ice_tests/fp.cmp.ll |
+++ b/tests_lit/llvm2ice_tests/fp.cmp.ll |
@@ -9,16 +9,16 @@ |
; RUN: -allow-externally-defined-symbols | FileCheck %s |
; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \ |
-; RUN: --target arm32 -i %s --args -O2 --skip-unimplemented \ |
+; RUN: --target arm32 -i %s --args -O2 \ |
; RUN: -allow-externally-defined-symbols \ |
; RUN: | %if --need=allow_dump --need=target_ARM32 --command FileCheck %s \ |
-; RUN: --check-prefix=ARM32 |
+; RUN: --check-prefix=ARM32 --check-prefix=ARM32-O2 |
; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \ |
-; RUN: --target arm32 -i %s --args -Om1 --skip-unimplemented \ |
+; RUN: --target arm32 -i %s --args -Om1 \ |
; RUN: -allow-externally-defined-symbols \ |
; RUN: | %if --need=allow_dump --need=target_ARM32 --command FileCheck %s \ |
-; RUN: --check-prefix=ARM32 |
+; RUN: --check-prefix=ARM32 --check-prefix=ARM32-OM1 |
define internal void @fcmpEq(float %a, float %b, double %c, double %d) { |
entry: |
@@ -51,13 +51,16 @@ if.end3: ; preds = %if.then2, %if.end |
; CHECK: call {{.*}} R_{{.*}} func |
; ARM32-LABEL: fcmpEq |
; ARM32: vcmp.f32 |
-; ARM32: mov [[R0:r[0-9]+]], #0 |
; ARM32: vmrs |
-; ARM32: moveq [[R0]], #1 |
+; ARM32-OM1: movne [[R0:r[0-9]+]], #0 |
+; ARM32-OM1: moveq [[R0]], #1 |
+; ARM32-O2: bne |
+; ARM32: bl func |
; ARM32: vcmp.f64 |
-; ARM32: mov [[R1:r[0-9]+]], #0 |
; ARM32: vmrs |
-; ARM32: moveq [[R1]], #1 |
+; ARM32-OM1: movne [[R1:r[0-9]+]], #0 |
+; ARM32-OM1: moveq [[R1]], #1 |
+; ARM32-O2: bne |
declare void @func() |
@@ -92,13 +95,15 @@ if.end3: ; preds = %if.then2, %if.end |
; CHECK: call {{.*}} R_{{.*}} func |
; ARM32-LABEL: fcmpNe |
; ARM32: vcmp.f32 |
-; ARM32: mov [[R0:r[0-9]+]], #0 |
; ARM32: vmrs |
-; ARM32: movne [[R0]], #1 |
+; ARM32-OM1: moveq [[R0:r[0-9]+]], #0 |
+; ARM32-OM1: movne [[R0]], #1 |
+; ARM32-O2: beq |
; ARM32: vcmp.f64 |
-; ARM32: mov [[R1:r[0-9]+]], #0 |
; ARM32: vmrs |
-; ARM32: movne [[R1]], #1 |
+; ARM32-OM1: moveq [[R1:r[0-9]+]], #0 |
+; ARM32-OM1: movne [[R1]], #1 |
+; ARM32-O2: beq |
define internal void @fcmpGt(float %a, float %b, double %c, double %d) { |
entry: |
@@ -129,13 +134,15 @@ if.end3: ; preds = %if.then2, %if.end |
; CHECK: call {{.*}} R_{{.*}} func |
; ARM32-LABEL: fcmpGt |
; ARM32: vcmp.f32 |
-; ARM32: mov [[R0:r[0-9]+]], #0 |
; ARM32: vmrs |
-; ARM32: movgt [[R0]], #1 |
+; ARM32-OM1: movle [[R0:r[0-9]+]], #0 |
+; ARM32-OM1: movgt [[R0]], #1 |
+; ARM32-O2: ble |
; ARM32: vcmp.f64 |
-; ARM32: mov [[R1:r[0-9]+]], #0 |
; ARM32: vmrs |
-; ARM32: movgt [[R1]], #1 |
+; ARM32-OM1: movle [[R1:r[0-9]+]], #0 |
+; ARM32-OM1: movgt [[R1]], #1 |
+; ARM32-O2: ble |
define internal void @fcmpGe(float %a, float %b, double %c, double %d) { |
entry: |
@@ -166,13 +173,15 @@ if.end3: ; preds = %if.end, %if.then2 |
; CHECK: call {{.*}} R_{{.*}} func |
; ARM32-LABEL: fcmpGe |
; ARM32: vcmp.f32 |
-; ARM32: mov [[R0:r[0-9]+]], #0 |
; ARM32: vmrs |
-; ARM32: movlt [[R0]], #1 |
+; ARM32-OM1: movge [[R0:r[0-9]+]], #0 |
+; ARM32-OM1: movlt [[R0]], #1 |
+; ARM32-O2: blt |
; ARM32: vcmp.f64 |
-; ARM32: mov [[R1:r[0-9]+]], #0 |
; ARM32: vmrs |
-; ARM32: movlt [[R1]], #1 |
+; ARM32-OM1: movge [[R1:r[0-9]+]], #0 |
+; ARM32-OM1: movlt [[R1]], #1 |
+; ARM32-O2: blt |
define internal void @fcmpLt(float %a, float %b, double %c, double %d) { |
entry: |
@@ -203,13 +212,15 @@ if.end3: ; preds = %if.then2, %if.end |
; CHECK: call {{.*}} R_{{.*}} func |
; ARM32-LABEL: fcmpLt |
; ARM32: vcmp.f32 |
-; ARM32: mov [[R0:r[0-9]+]], #0 |
; ARM32: vmrs |
-; ARM32: movmi [[R0]], #1 |
+; ARM32-OM1: movpl [[R0:r[0-9]+]], #0 |
+; ARM32-OM1: movmi [[R0]], #1 |
+; ARM32-O2: bpl |
; ARM32: vcmp.f64 |
-; ARM32: mov [[R1:r[0-9]+]], #0 |
; ARM32: vmrs |
-; ARM32: movmi [[R1]], #1 |
+; ARM32-OM1: movpl [[R1:r[0-9]+]], #0 |
+; ARM32-OM1: movmi [[R1]], #1 |
+; ARM32-O2: bpl |
define internal void @fcmpLe(float %a, float %b, double %c, double %d) { |
entry: |
@@ -240,13 +251,15 @@ if.end3: ; preds = %if.end, %if.then2 |
; CHECK: call {{.*}} R_{{.*}} func |
; ARM32-LABEL: fcmpLe |
; ARM32: vcmp.f32 |
-; ARM32: mov [[R0:r[0-9]+]], #0 |
; ARM32: vmrs |
-; ARM32: movhi [[R0]], #1 |
+; ARM32-OM1: movls [[R0:r[0-9]+]], #0 |
+; ARM32-OM1: movhi [[R0]], #1 |
+; ARM32-O2: bhi |
; ARM32: vcmp.f64 |
-; ARM32: mov [[R1:r[0-9]+]], #0 |
; ARM32: vmrs |
-; ARM32: movhi [[R1]], #1 |
+; ARM32-OM1: movls [[R1:r[0-9]+]], #0 |
+; ARM32-OM1: movhi [[R1]], #1 |
+; ARM32-O2: bhi |
define internal i32 @fcmpFalseFloat(float %a, float %b) { |
entry: |
@@ -257,7 +270,6 @@ 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) { |
@@ -269,7 +281,6 @@ 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) { |
@@ -284,8 +295,8 @@ entry: |
; CHECK: jp |
; ARM32-LABEL: fcmpOeqFloat |
; ARM32: vcmp.f32 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: movne [[R:r[0-9]+]], #0 |
; ARM32: moveq [[R]], #1 |
define internal i32 @fcmpOeqDouble(double %a, double %b) { |
@@ -300,8 +311,8 @@ entry: |
; CHECK: jp |
; ARM32-LABEL: fcmpOeqDouble |
; ARM32: vcmp.f64 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: movne [[R:r[0-9]+]], #0 |
; ARM32: moveq [[R]], #1 |
define internal i32 @fcmpOgtFloat(float %a, float %b) { |
@@ -315,8 +326,8 @@ entry: |
; CHECK: seta |
; ARM32-LABEL: fcmpOgtFloat |
; ARM32: vcmp.f32 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: movle [[R:r[0-9]+]], #0 |
; ARM32: movgt [[R]], #1 |
define internal i32 @fcmpOgtDouble(double %a, double %b) { |
@@ -330,8 +341,8 @@ entry: |
; CHECK: seta |
; ARM32-LABEL: fcmpOgtDouble |
; ARM32: vcmp.f64 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: movle [[R:r[0-9]+]], #0 |
; ARM32: movgt [[R]], #1 |
define internal i32 @fcmpOgeFloat(float %a, float %b) { |
@@ -345,8 +356,8 @@ entry: |
; CHECK: setae |
; ARM32-LABEL: fcmpOgeFloat |
; ARM32: vcmp.f32 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: movlt [[R:r[0-9]+]], #0 |
; ARM32: movge [[R]], #1 |
define internal i32 @fcmpOgeDouble(double %a, double %b) { |
@@ -360,8 +371,8 @@ entry: |
; CHECK: setae |
; ARM32-LABEL: fcmpOgeDouble |
; ARM32: vcmp.f64 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: movlt [[R:r[0-9]+]], #0 |
; ARM32: movge [[R]], #1 |
define internal i32 @fcmpOltFloat(float %a, float %b) { |
@@ -375,8 +386,8 @@ entry: |
; CHECK: seta |
; ARM32-LABEL: fcmpOltFloat |
; ARM32: vcmp.f32 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: movpl [[R:r[0-9]+]], #0 |
; ARM32: movmi [[R]], #1 |
define internal i32 @fcmpOltDouble(double %a, double %b) { |
@@ -390,8 +401,8 @@ entry: |
; CHECK: seta |
; ARM32-LABEL: fcmpOltDouble |
; ARM32: vcmp.f64 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: movpl [[R:r[0-9]+]], #0 |
; ARM32: movmi [[R]], #1 |
define internal i32 @fcmpOleFloat(float %a, float %b) { |
@@ -405,8 +416,8 @@ entry: |
; CHECK: setae |
; ARM32-LABEL: fcmpOleFloat |
; ARM32: vcmp.f32 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: movhi [[R:r[0-9]+]], #0 |
; ARM32: movls [[R]], #1 |
define internal i32 @fcmpOleDouble(double %a, double %b) { |
@@ -420,8 +431,8 @@ entry: |
; CHECK: setae |
; ARM32-LABEL: fcmpOleDouble |
; ARM32: vcmp.f64 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: movhi [[R:r[0-9]+]], #0 |
; ARM32: movls [[R]], #1 |
define internal i32 @fcmpOneFloat(float %a, float %b) { |
@@ -435,8 +446,8 @@ entry: |
; CHECK: setne |
; ARM32-LABEL: fcmpOneFloat |
; ARM32: vcmp.f32 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: movmi [[R]], #1 |
; ARM32: movgt [[R]], #1 |
@@ -451,8 +462,8 @@ entry: |
; CHECK: setne |
; ARM32-LABEL: fcmpOneDouble |
; ARM32: vcmp.f64 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: movmi [[R]], #1 |
; ARM32: movgt [[R]], #1 |
@@ -467,8 +478,8 @@ entry: |
; CHECK: setnp |
; ARM32-LABEL: fcmpOrdFloat |
; ARM32: vcmp.f32 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: movvs [[R:r[0-9]+]], #0 |
; ARM32: movvc [[R]], #1 |
define internal i32 @fcmpOrdDouble(double %a, double %b) { |
@@ -482,8 +493,8 @@ entry: |
; CHECK: setnp |
; ARM32-LABEL: fcmpOrdDouble |
; ARM32: vcmp.f64 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: movvs [[R:r[0-9]+]], #0 |
; ARM32: movvc [[R]], #1 |
define internal i32 @fcmpUeqFloat(float %a, float %b) { |
@@ -497,8 +508,8 @@ entry: |
; CHECK: sete |
; ARM32-LABEL: fcmpUeqFloat |
; ARM32: vcmp.f32 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: moveq [[R]], #1 |
; ARM32: movvs [[R]], #1 |
@@ -513,8 +524,8 @@ entry: |
; CHECK: sete |
; ARM32-LABEL: fcmpUeqDouble |
; ARM32: vcmp.f64 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: moveq [[R]], #1 |
; ARM32: movvs [[R]], #1 |
@@ -529,8 +540,8 @@ entry: |
; CHECK: setb |
; ARM32-LABEL: fcmpUgtFloat |
; ARM32: vcmp.f32 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: movls [[R:r[0-9]+]], #0 |
; ARM32: movhi [[R]], #1 |
define internal i32 @fcmpUgtDouble(double %a, double %b) { |
@@ -544,8 +555,8 @@ entry: |
; CHECK: setb |
; ARM32-LABEL: fcmpUgtDouble |
; ARM32: vcmp.f64 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: movls [[R:r[0-9]+]], #0 |
; ARM32: movhi [[R]], #1 |
define internal i32 @fcmpUgeFloat(float %a, float %b) { |
@@ -559,8 +570,8 @@ entry: |
; CHECK: setbe |
; ARM32-LABEL: fcmpUgeFloat |
; ARM32: vcmp.f32 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: movmi [[R:r[0-9]+]], #0 |
; ARM32: movpl [[R]], #1 |
define internal i32 @fcmpUgeDouble(double %a, double %b) { |
@@ -574,8 +585,8 @@ entry: |
; CHECK: setbe |
; ARM32-LABEL: fcmpUgeDouble |
; ARM32: vcmp.f64 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: movmi [[R:r[0-9]+]], #0 |
; ARM32: movpl [[R]], #1 |
define internal i32 @fcmpUltFloat(float %a, float %b) { |
@@ -589,8 +600,8 @@ entry: |
; CHECK: setb |
; ARM32-LABEL: fcmpUltFloat |
; ARM32: vcmp.f32 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: movge [[R:r[0-9]+]], #0 |
; ARM32: movlt [[R]], #1 |
define internal i32 @fcmpUltDouble(double %a, double %b) { |
@@ -604,8 +615,8 @@ entry: |
; CHECK: setb |
; ARM32-LABEL: fcmpUltDouble |
; ARM32: vcmp.f64 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: movge [[R:r[0-9]+]], #0 |
; ARM32: movlt [[R]], #1 |
define internal i32 @fcmpUleFloat(float %a, float %b) { |
@@ -619,8 +630,8 @@ entry: |
; CHECK: setbe |
; ARM32-LABEL: fcmpUleFloat |
; ARM32: vcmp.f32 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: movgt [[R:r[0-9]+]], #0 |
; ARM32: movle [[R]], #1 |
define internal i32 @fcmpUleDouble(double %a, double %b) { |
@@ -634,8 +645,8 @@ entry: |
; CHECK: setbe |
; ARM32-LABEL: fcmpUleDouble |
; ARM32: vcmp.f64 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: movgt [[R:r[0-9]+]], #0 |
; ARM32: movle [[R]], #1 |
define internal i32 @fcmpUneFloat(float %a, float %b) { |
@@ -650,8 +661,8 @@ entry: |
; CHECK: jp |
; ARM32-LABEL: fcmpUneFloat |
; ARM32: vcmp.f32 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: moveq [[R:r[0-9]+]], #0 |
; ARM32: movne [[R]], #1 |
define internal i32 @fcmpUneDouble(double %a, double %b) { |
@@ -666,8 +677,8 @@ entry: |
; CHECK: jp |
; ARM32-LABEL: fcmpUneDouble |
; ARM32: vcmp.f64 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: moveq [[R:r[0-9]+]], #0 |
; ARM32: movne [[R]], #1 |
define internal i32 @fcmpUnoFloat(float %a, float %b) { |
@@ -681,8 +692,8 @@ entry: |
; CHECK: setp |
; ARM32-LABEL: fcmpUnoFloat |
; ARM32: vcmp.f32 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: movvc [[R:r[0-9]+]], #0 |
; ARM32: movvs [[R]], #1 |
define internal i32 @fcmpUnoDouble(double %a, double %b) { |
@@ -696,8 +707,8 @@ entry: |
; CHECK: setp |
; ARM32-LABEL: fcmpUnoDouble |
; ARM32: vcmp.f64 |
-; ARM32: mov [[R:r[0-9]+]], #0 |
; ARM32: vmrs |
+; ARM32: movvc [[R:r[0-9]+]], #0 |
; ARM32: movvs [[R]], #1 |
define internal i32 @fcmpTrueFloat(float %a, float %b) { |
@@ -709,8 +720,7 @@ entry: |
; CHECK-LABEL: fcmpTrueFloat |
; CHECK: mov {{.*}},0x1 |
; ARM32-LABEL: fcmpTrueFloat |
-; ARM32: vcmp.f32 |
-; ARM32: mov [[R]], #1 |
+; ARM32: mov {{r[0-9]+}}, #1 |
define internal i32 @fcmpTrueDouble(double %a, double %b) { |
entry: |
@@ -721,8 +731,7 @@ entry: |
; CHECK-LABEL: fcmpTrueDouble |
; CHECK: mov {{.*}},0x1 |
; ARM32-LABEL: fcmpTrueDouble |
-; ARM32: vcmp.f64 |
-; ARM32: mov [[R]], #1 |
+; ARM32: mov {{r[0-9]+}}, #1 |
define internal float @selectFloatVarVar(float %a, float %b) { |
entry: |
@@ -736,7 +745,8 @@ entry: |
; CHECK: fld |
; ARM32-LABEL: selectFloatVarVar |
; ARM32: vcmp.f32 |
-; ARM32: vmovne.f32 s{{[0-9]+}} |
+; ARM32-OM1: vmovne.f32 s{{[0-9]+}} |
+; ARM32-O2: vmovmi.f32 s{{[0-9]+}} |
; ARM32: bx |
define internal double @selectDoubleVarVar(double %a, double %b) { |
@@ -751,5 +761,6 @@ entry: |
; CHECK: fld |
; ARM32-LABEL: selectDoubleVarVar |
; ARM32: vcmp.f64 |
-; ARM32: vmovne.f64 d{{[0-9]+}} |
+; ARM32-OM1: vmovne.f64 d{{[0-9]+}} |
+; ARM32-O2: vmovmi.f64 d{{[0-9]+}} |
; ARM32: bx |