diff options
| author | Sjoerd Meijer <sjoerd.meijer@arm.com> | 2018-04-19 08:21:50 +0000 |
|---|---|---|
| committer | Sjoerd Meijer <sjoerd.meijer@arm.com> | 2018-04-19 08:21:50 +0000 |
| commit | a79ea80d7bf2c7e15a223eeabc48ec5ef298fe05 (patch) | |
| tree | 31aae1986aa6e69c593757eca5b525b89fdcc8f4 /llvm/test/CodeGen | |
| parent | 4132b849e55ced071f83984548a3d922913806b5 (diff) | |
| download | bcm5719-llvm-a79ea80d7bf2c7e15a223eeabc48ec5ef298fe05.tar.gz bcm5719-llvm-a79ea80d7bf2c7e15a223eeabc48ec5ef298fe05.zip | |
[ARM] Add some missing FP16 VSEL test cases
Differential Revision: https://reviews.llvm.org/D45724
llvm-svn: 330313
Diffstat (limited to 'llvm/test/CodeGen')
| -rw-r--r-- | llvm/test/CodeGen/ARM/fp16-instructions.ll | 91 |
1 files changed, 83 insertions, 8 deletions
diff --git a/llvm/test/CodeGen/ARM/fp16-instructions.ll b/llvm/test/CodeGen/ARM/fp16-instructions.ll index 03deb2e3ef2..5d7946deb59 100644 --- a/llvm/test/CodeGen/ARM/fp16-instructions.ll +++ b/llvm/test/CodeGen/ARM/fp16-instructions.ll @@ -485,7 +485,6 @@ entry: ; 18. VMINNM ; Tested in fp16-vminmaxnm.ll and fp16-vminmaxnm-safe.ll - ; 19. VMLA define float @VMLA(float %a.coerce, float %b.coerce, float %c.coerce) { entry: @@ -735,7 +734,7 @@ define half @select_cc_ge1() { ; CHECK-LABEL: select_cc_ge1: -; CHECK-HARDFP-FULLFP16: vcmpe.f16 s0, s0 +; CHECK-HARDFP-FULLFP16: vcmpe.f16 s0, s0 ; CHECK-HARDFP-FULLFP16-NEXT: vmrs APSR_nzcv, fpscr ; CHECK-HARDFP-FULLFP16-NEXT: vselge.f16 s0, s{{.}}, s{{.}} @@ -749,9 +748,26 @@ define half @select_cc_ge1() { ; CHECK-SOFTFP-FP16-T32-NEXT: vmovge.f32 s{{.}}, s{{.}} } -; -; FIXME: add fcmp ole, ult here. -; +define half @select_cc_ge2() { + %1 = fcmp nsz ole half undef, 0xH0001 + %2 = select i1 %1, half 0xHC000, half 0xH0002 + ret half %2 + +; CHECK-LABEL: select_cc_ge2: + +; CHECK-HARDFP-FULLFP16: vcmpe.f16 s0, s0 +; CHECK-HARDFP-FULLFP16-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-HARDFP-FULLFP16-NEXT: vselge.f16 s0, s{{.}}, s{{.}} + +; CHECK-SOFTFP-FP16-A32: vcmpe.f32 s0, s0 +; CHECK-SOFTFP-FP16-A32-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-SOFTFP-FP16-A32-NEXT: vmovls.f32 s{{.}}, s{{.}} + +; CHECK-SOFTFP-FP16-T32: vcmpe.f32 s0, s0 +; CHECK-SOFTFP-FP16-T32-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-SOFTFP-FP16-T32-NEXT: it ls +; CHECK-SOFTFP-FP16-T32-NEXT: vmovls.f32 s{{.}}, s{{.}} +} define half @select_cc_ge3() { %1 = fcmp nsz ugt half undef, 0xH0001 @@ -774,6 +790,27 @@ define half @select_cc_ge3() { ; CHECK-SOFTFP-FP16-T32-NEXT: vmovhi.f32 s{{.}}, s{{.}} } +define half @select_cc_ge4() { + %1 = fcmp nsz ult half undef, 0xH0001 + %2 = select i1 %1, half 0xHC000, half 0xH0002 + ret half %2 + +; CHECK-LABEL: select_cc_ge4: + +; CHECK-HARDFP-FULLFP16: vcmpe.f16 s0, s0 +; CHECK-HARDFP-FULLFP16-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-HARDFP-FULLFP16-NEXT: vselge.f16 s0, s{{.}}, s{{.}} + +; CHECK-SOFTFP-FP16-A32: vcmpe.f32 s0, s0 +; CHECK-SOFTFP-FP16-A32-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-SOFTFP-FP16-A32-NEXT: vmovlt.f32 s{{.}}, s{{.}} + +; CHECK-SOFTFP-FP16-T32: vcmpe.f32 s0, s0 +; CHECK-SOFTFP-FP16-T32-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-SOFTFP-FP16-T32-NEXT: it lt +; CHECK-SOFTFP-FP16-T32-NEXT: vmovlt.f32 s{{.}}, s{{.}} +} + ; 37. VSELGT define half @select_cc_gt1() { %1 = fcmp nsz ogt half undef, 0xH0001 @@ -817,9 +854,47 @@ define half @select_cc_gt2() { ; CHECK-SOFTFP-FP16-T32-NEXT: vmovpl.f32 s{{.}}, s{{.}} } -; -; FIXME: add fcmp ule, olt here. -; +define half @select_cc_gt3() { + %1 = fcmp nsz ule half undef, 0xH0001 + %2 = select i1 %1, half 0xHC000, half 0xH0002 + ret half %2 + +; CHECK-LABEL: select_cc_gt3: + +; CHECK-HARDFP-FULLFP16: vcmpe.f16 s0, s0 +; CHECK-HARDFP-FULLFP16-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-HARDFP-FULLFP16-NEXT: vselgt.f16 s0, s{{.}}, s{{.}} + +; CHECK-SOFTFP-FP16-A32: vcmpe.f32 s0, s0 +; CHECK-SOFTFP-FP16-A32-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-SOFTFP-FP16-A32-NEXT: vmovle.f32 s{{.}}, s{{.}} + +; CHECK-SOFTFP-FP16-T32: vcmpe.f32 s0, s0 +; CHECK-SOFTFP-FP16-T32-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-SOFTFP-FP16-T32-NEXT: it le +; CHECK-SOFTFP-FP16-T32-NEXT: vmovle.f32 s{{.}}, s{{.}} +} + +define half @select_cc_gt4() { + %1 = fcmp nsz olt half undef, 0xH0001 + %2 = select i1 %1, half 0xHC000, half 0xH0002 + ret half %2 + +; CHECK-LABEL: select_cc_gt4: + +; CHECK-HARDFP-FULLFP16: vcmpe.f16 s0, s0 +; CHECK-HARDFP-FULLFP16-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-HARDFP-FULLFP16-NEXT: vselgt.f16 s0, s{{.}}, s{{.}} + +; CHECK-SOFTFP-FP16-A32: vcmpe.f32 s0, s0 +; CHECK-SOFTFP-FP16-A32-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-SOFTFP-FP16-A32-NEXT: vmovmi.f32 s{{.}}, s{{.}} + +; CHECK-SOFTFP-FP16-T32: vcmpe.f32 s0, s0 +; CHECK-SOFTFP-FP16-T32-NEXT: vmrs APSR_nzcv, fpscr +; CHECK-SOFTFP-FP16-T32-NEXT: it mi +; CHECK-SOFTFP-FP16-T32-NEXT: vmovmi.f32 s{{.}}, s{{.}} +} ; 38. VSELVS define float @select_cc4(float %a.coerce) { |

