mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-02 18:42:36 +00:00
[AArch64] Don't assert on f16 in DUP PerfectShuffle generator.
Found by code inspection, but breaking i16 at least breaks other tests. They aren't checking this in particular though, so also add some explicit tests for the already working types. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235148 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
32b845d223
commit
7e3c3ae7c1
@ -5046,7 +5046,7 @@ static SDValue GeneratePerfectShuffle(unsigned PFEntry, SDValue LHS,
|
||||
unsigned Opcode;
|
||||
if (EltTy == MVT::i8)
|
||||
Opcode = AArch64ISD::DUPLANE8;
|
||||
else if (EltTy == MVT::i16)
|
||||
else if (EltTy == MVT::i16 || EltTy == MVT::f16)
|
||||
Opcode = AArch64ISD::DUPLANE16;
|
||||
else if (EltTy == MVT::i32 || EltTy == MVT::f32)
|
||||
Opcode = AArch64ISD::DUPLANE32;
|
||||
|
@ -321,3 +321,40 @@ entry:
|
||||
%sub = sub <4 x i16> %a, %mul
|
||||
ret <4 x i16> %sub
|
||||
}
|
||||
|
||||
; Also test the DUP path in the PerfectShuffle generator.
|
||||
|
||||
; CHECK-LABEL: test_perfectshuffle_dupext_v4i16:
|
||||
; CHECK-NEXT: dup.4h v0, v0[0]
|
||||
; CHECK-NEXT: ext.8b v0, v0, v1, #4
|
||||
define <4 x i16> @test_perfectshuffle_dupext_v4i16(<4 x i16> %a, <4 x i16> %b) nounwind {
|
||||
%r = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 0, i32 4, i32 5>
|
||||
ret <4 x i16> %r
|
||||
}
|
||||
|
||||
; CHECK-LABEL: test_perfectshuffle_dupext_v4f16:
|
||||
; CHECK-NEXT: dup.4h v0, v0[0]
|
||||
; CHECK-NEXT: ext.8b v0, v0, v1, #4
|
||||
; CHECK-NEXT: ret
|
||||
define <4 x half> @test_perfectshuffle_dupext_v4f16(<4 x half> %a, <4 x half> %b) nounwind {
|
||||
%r = shufflevector <4 x half> %a, <4 x half> %b, <4 x i32> <i32 0, i32 0, i32 4, i32 5>
|
||||
ret <4 x half> %r
|
||||
}
|
||||
|
||||
; CHECK-LABEL: test_perfectshuffle_dupext_v4i32:
|
||||
; CHECK-NEXT: dup.4s v0, v0[0]
|
||||
; CHECK-NEXT: ext.16b v0, v0, v1, #8
|
||||
; CHECK-NEXT: ret
|
||||
define <4 x i32> @test_perfectshuffle_dupext_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
|
||||
%r = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 0, i32 4, i32 5>
|
||||
ret <4 x i32> %r
|
||||
}
|
||||
|
||||
; CHECK-LABEL: test_perfectshuffle_dupext_v4f32:
|
||||
; CHECK-NEXT: dup.4s v0, v0[0]
|
||||
; CHECK-NEXT: ext.16b v0, v0, v1, #8
|
||||
; CHECK-NEXT: ret
|
||||
define <4 x float> @test_perfectshuffle_dupext_v4f32(<4 x float> %a, <4 x float> %b) nounwind {
|
||||
%r = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 0, i32 4, i32 5>
|
||||
ret <4 x float> %r
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user