mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-10-25 10:27:04 +00:00
Implement sdiv & udiv for <4 x i16> and <8 x i8> NEON vector types.
This avoids moving each element to the integer register file and calling __divsi3 etc. on it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@125402 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
48
test/CodeGen/ARM/neon_div.ll
Normal file
48
test/CodeGen/ARM/neon_div.ll
Normal file
@@ -0,0 +1,48 @@
|
||||
; RUN: llc < %s -march=arm -mattr=+neon | FileCheck %s
|
||||
|
||||
define <8 x i8> @sdivi8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
|
||||
;CHECK: vrecpe.f32
|
||||
;CHECK: vrecpe.f32
|
||||
;CHECK: vmovn.i32
|
||||
;CHECK: vmovn.i32
|
||||
;CHECK: vmovn.i16
|
||||
%tmp1 = load <8 x i8>* %A
|
||||
%tmp2 = load <8 x i8>* %B
|
||||
%tmp3 = sdiv <8 x i8> %tmp1, %tmp2
|
||||
ret <8 x i8> %tmp3
|
||||
}
|
||||
|
||||
define <8 x i8> @udivi8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
|
||||
;CHECK: vrecpe.f32
|
||||
;CHECK: vrecps.f32
|
||||
;CHECK: vrecpe.f32
|
||||
;CHECK: vrecps.f32
|
||||
;CHECK: vmovn.i32
|
||||
;CHECK: vmovn.i32
|
||||
;CHECK: vqmovun.s16
|
||||
%tmp1 = load <8 x i8>* %A
|
||||
%tmp2 = load <8 x i8>* %B
|
||||
%tmp3 = udiv <8 x i8> %tmp1, %tmp2
|
||||
ret <8 x i8> %tmp3
|
||||
}
|
||||
|
||||
define <4 x i16> @sdivi16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
|
||||
;CHECK: vrecpe.f32
|
||||
;CHECK: vrecps.f32
|
||||
;CHECK: vmovn.i32
|
||||
%tmp1 = load <4 x i16>* %A
|
||||
%tmp2 = load <4 x i16>* %B
|
||||
%tmp3 = sdiv <4 x i16> %tmp1, %tmp2
|
||||
ret <4 x i16> %tmp3
|
||||
}
|
||||
|
||||
define <4 x i16> @udivi16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
|
||||
;CHECK: vrecpe.f32
|
||||
;CHECK: vrecps.f32
|
||||
;CHECK: vrecps.f32
|
||||
;CHECK: vmovn.i32
|
||||
%tmp1 = load <4 x i16>* %A
|
||||
%tmp2 = load <4 x i16>* %B
|
||||
%tmp3 = udiv <4 x i16> %tmp1, %tmp2
|
||||
ret <4 x i16> %tmp3
|
||||
}
|
||||
Reference in New Issue
Block a user