Index: tests_lit/llvm2ice_tests/vector-fcmp.ll |
diff --git a/tests_lit/llvm2ice_tests/vector-fcmp.ll b/tests_lit/llvm2ice_tests/vector-fcmp.ll |
index 97e438b724d55e904c80f4978a428f0db49b80ff..9703d15b5bc8a22ddff2eb18a30f1a6a8aead872 100644 |
--- a/tests_lit/llvm2ice_tests/vector-fcmp.ll |
+++ b/tests_lit/llvm2ice_tests/vector-fcmp.ll |
@@ -4,6 +4,12 @@ |
; RUN: %p2i -i %s --filetype=obj --disassemble -a -O2 | FileCheck %s |
; RUN: %p2i -i %s --filetype=obj --disassemble -a -Om1 | FileCheck %s |
+; RUN: %if --need=target_MIPS32 --need=allow_dump \ |
+; RUN: --command %p2i --filetype=asm --assemble --disassemble --target mips32\ |
+; RUN: -i %s --args -O2 --skip-unimplemented \ |
+; RUN: | %if --need=target_MIPS32 --need=allow_dump \ |
+; RUN: --command FileCheck --check-prefix MIPS32 %s |
+ |
; Check that sext elimination occurs when the result of the comparison |
; instruction is alrady sign extended. Sign extension to 4 x i32 uses |
; the pslld instruction. |
@@ -16,6 +22,19 @@ entry: |
; CHECK: cmpeqps |
; CHECK-NOT: pslld |
} |
+; MIPS32-LABEL: sextElimination |
+; MIPS32: c.eq.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
+; MIPS32: c.eq.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
+; MIPS32: c.eq.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
+; MIPS32: c.eq.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
define internal <4 x i32> @fcmpFalseVector(<4 x float> %a, <4 x float> %b) { |
entry: |
@@ -25,6 +44,11 @@ entry: |
; CHECK-LABEL: fcmpFalseVector |
; CHECK: pxor |
} |
+; MIPS32-LABEL: fcmpFalseVector |
+; MIPS32: li v0,0 |
+; MIPS32: li v1,0 |
+; MIPS32: li a0,0 |
+; MIPS32: li a1,0 |
define internal <4 x i32> @fcmpOeqVector(<4 x float> %a, <4 x float> %b) { |
entry: |
@@ -34,6 +58,19 @@ entry: |
; CHECK-LABEL: fcmpOeqVector |
; CHECK: cmpeqps |
} |
+; MIPS32-LABEL: fcmpOeqVector |
+; MIPS32: c.eq.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
+; MIPS32: c.eq.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
+; MIPS32: c.eq.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
+; MIPS32: c.eq.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
define internal <4 x i32> @fcmpOgeVector(<4 x float> %a, <4 x float> %b) { |
entry: |
@@ -43,6 +80,19 @@ entry: |
; CHECK-LABEL: fcmpOgeVector |
; CHECK: cmpleps |
} |
+; MIPS32-LABEL: fcmpOgeVector |
+; MIPS32: c.ult.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
+; MIPS32: c.ult.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
+; MIPS32: c.ult.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
+; MIPS32: c.ult.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
define internal <4 x i32> @fcmpOgtVector(<4 x float> %a, <4 x float> %b) { |
entry: |
@@ -52,6 +102,19 @@ entry: |
; CHECK-LABEL: fcmpOgtVector |
; CHECK: cmpltps |
} |
+; MIPS32-LABEL: fcmpOgtVector |
+; MIPS32: c.ule.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
+; MIPS32: c.ule.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
+; MIPS32: c.ule.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
+; MIPS32: c.ule.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
define internal <4 x i32> @fcmpOleVector(<4 x float> %a, <4 x float> %b) { |
entry: |
@@ -61,6 +124,19 @@ entry: |
; CHECK-LABEL: fcmpOleVector |
; CHECK: cmpleps |
} |
+; MIPS32-LABEL: fcmpOleVector |
+; MIPS32: c.ole.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
+; MIPS32: c.ole.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
+; MIPS32: c.ole.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
+; MIPS32: c.ole.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
define internal <4 x i32> @fcmpOltVector(<4 x float> %a, <4 x float> %b) { |
entry: |
@@ -70,6 +146,19 @@ entry: |
; CHECK-LABEL: fcmpOltVector |
; CHECK: cmpltps |
} |
+; MIPS32-LABEL: fcmpOltVector |
+; MIPS32: c.olt.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
+; MIPS32: c.olt.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
+; MIPS32: c.olt.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
+; MIPS32: c.olt.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
define internal <4 x i32> @fcmpOneVector(<4 x float> %a, <4 x float> %b) { |
entry: |
@@ -81,6 +170,19 @@ entry: |
; CHECK: cmpordps |
; CHECK: pand |
} |
+; MIPS32-LABEL: fcmpOneVector |
+; MIPS32: c.ueq.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
+; MIPS32: c.ueq.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
+; MIPS32: c.ueq.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
+; MIPS32: c.ueq.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
define internal <4 x i32> @fcmpOrdVector(<4 x float> %a, <4 x float> %b) { |
entry: |
@@ -90,6 +192,19 @@ entry: |
; CHECK-LABEL: fcmpOrdVector |
; CHECK: cmpordps |
} |
+; MIPS32-LABEL: fcmpOrdVector |
+; MIPS32: c.un.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
+; MIPS32: c.un.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
+; MIPS32: c.un.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
+; MIPS32: c.un.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
define internal <4 x i32> @fcmpTrueVector(<4 x float> %a, <4 x float> %b) { |
entry: |
@@ -99,6 +214,11 @@ entry: |
; CHECK-LABEL: fcmpTrueVector |
; CHECK: pcmpeqd |
} |
+; MIPS32-LABEL: fcmpTrueVector |
+; MIPS32: li v0,1 |
+; MIPS32: li v1,1 |
+; MIPS32: li a0,1 |
+; MIPS32: li a1,1 |
define internal <4 x i32> @fcmpUeqVector(<4 x float> %a, <4 x float> %b) { |
entry: |
@@ -110,6 +230,19 @@ entry: |
; CHECK: cmpunordps |
; CHECK: por |
} |
+; MIPS32-LABEL: fcmpUeqVector |
+; MIPS32: c.ueq.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
+; MIPS32: c.ueq.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
+; MIPS32: c.ueq.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
+; MIPS32: c.ueq.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
define internal <4 x i32> @fcmpUgeVector(<4 x float> %a, <4 x float> %b) { |
entry: |
@@ -119,6 +252,19 @@ entry: |
; CHECK-LABEL: fcmpUgeVector |
; CHECK: cmpnltps |
} |
+; MIPS32-LABEL: fcmpUgeVector |
+; MIPS32: c.olt.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
+; MIPS32: c.olt.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
+; MIPS32: c.olt.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
+; MIPS32: c.olt.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
define internal <4 x i32> @fcmpUgtVector(<4 x float> %a, <4 x float> %b) { |
entry: |
@@ -128,6 +274,19 @@ entry: |
; CHECK-LABEL: fcmpUgtVector |
; CHECK: cmpnleps |
} |
+; MIPS32-LABEL: fcmpUgtVector |
+; MIPS32: c.ole.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
+; MIPS32: c.ole.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
+; MIPS32: c.ole.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
+; MIPS32: c.ole.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
define internal <4 x i32> @fcmpUleVector(<4 x float> %a, <4 x float> %b) { |
entry: |
@@ -137,6 +296,19 @@ entry: |
; CHECK-LABEL: fcmpUleVector |
; CHECK: cmpnltps |
} |
+; MIPS32-LABEL: fcmpUleVector |
+; MIPS32: c.ule.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
+; MIPS32: c.ule.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
+; MIPS32: c.ule.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
+; MIPS32: c.ule.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
define internal <4 x i32> @fcmpUltVector(<4 x float> %a, <4 x float> %b) { |
entry: |
@@ -146,6 +318,19 @@ entry: |
; CHECK-LABEL: fcmpUltVector |
; CHECK: cmpnleps |
} |
+; MIPS32-LABEL: fcmpUltVector |
+; MIPS32: c.ult.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
+; MIPS32: c.ult.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
+; MIPS32: c.ult.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
+; MIPS32: c.ult.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
define internal <4 x i32> @fcmpUneVector(<4 x float> %a, <4 x float> %b) { |
entry: |
@@ -155,6 +340,19 @@ entry: |
; CHECK-LABEL: fcmpUneVector |
; CHECK: cmpneqps |
} |
+; MIPS32-LABEL: fcmpUneVector |
+; MIPS32: c.eq.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
+; MIPS32: c.eq.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
+; MIPS32: c.eq.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
+; MIPS32: c.eq.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movt [[R]],zero,$fcc0 |
define internal <4 x i32> @fcmpUnoVector(<4 x float> %a, <4 x float> %b) { |
entry: |
@@ -164,3 +362,16 @@ entry: |
; CHECK-LABEL: fcmpUnoVector |
; CHECK: cmpunordps |
} |
+; MIPS32-LABEL: fcmpUnoVector |
+; MIPS32: c.un.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
+; MIPS32: c.un.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
+; MIPS32: c.un.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |
+; MIPS32: c.un.s |
+; MIPS32: li [[R:.*]],1 |
+; MIPS32: movf [[R]],zero,$fcc0 |