[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:
Benjamin Kramer 2018-04-26 15:26:29 +00:00
parent a5da086386
commit 7dd437710e
2 changed files with 9 additions and 0 deletions

View File

@ -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);

View File

@ -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" }