mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-20 03:23:01 +02:00
[NVPTX] Make the legalizer expand shufflevector of <2 x half>
There's no direct instruction for this, but it's trivially implemented with two movs. Without this the code generator just dies when encountering a shufflevector. Differential Revision: https://reviews.llvm.org/D46116 llvm-svn: 330948
This commit is contained in:
parent
baec2ad5a7
commit
9bbeaa7c56
@ -375,6 +375,7 @@ NVPTXTargetLowering::NVPTXTargetLowering(const NVPTXTargetMachine &TM,
|
||||
setOperationAction(ISD::FP_TO_SINT, MVT::f16, Legal);
|
||||
setOperationAction(ISD::BUILD_VECTOR, MVT::v2f16, Custom);
|
||||
setOperationAction(ISD::EXTRACT_VECTOR_ELT, MVT::v2f16, Custom);
|
||||
setOperationAction(ISD::VECTOR_SHUFFLE, MVT::v2f16, Expand);
|
||||
|
||||
setFP16OperationAction(ISD::SETCC, MVT::f16, Legal, Promote);
|
||||
setFP16OperationAction(ISD::SETCC, MVT::v2f16, Legal, Expand);
|
||||
|
@ -1423,5 +1423,13 @@ define <2 x half> @test_fmuladd(<2 x half> %a, <2 x half> %b, <2 x half> %c) #0
|
||||
ret <2 x half> %r
|
||||
}
|
||||
|
||||
; CHECK-LABEL: test_shufflevector(
|
||||
; CHECK: mov.b32 {%h1, %h2}, %hh1;
|
||||
; CHECK: mov.b32 %hh2, {%h2, %h1};
|
||||
define <2 x half> @test_shufflevector(<2 x half> %a) #0 {
|
||||
%s = shufflevector <2 x half> %a, <2 x half> undef, <2 x i32> <i32 1, i32 0>
|
||||
ret <2 x half> %s
|
||||
}
|
||||
|
||||
attributes #0 = { nounwind }
|
||||
attributes #1 = { "unsafe-fp-math" = "true" }
|
||||
|
Loading…
Reference in New Issue
Block a user