<div dir="auto">Lgtm.</div><br><div class="gmail_quote"><div dir="ltr">On Thu, Apr 26, 2018, 5:42 AM Benjamin Kramer via Phabricator <<a href="mailto:reviews@reviews.llvm.org">reviews@reviews.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">bkramer created this revision.<br>
bkramer added a reviewer: tra.<br>
Herald added a subscriber: jholewinski.<br>
<br>
There's no direct instruction for this, but it's trivially implemented<br>
with two movs. Without this the code generator just dies when<br>
encountering a shufflevector.<br>
<br>
<br>
Repository:<br>
rL LLVM<br>
<br>
<a href="https://reviews.llvm.org/D46116" rel="noreferrer noreferrer" target="_blank">https://reviews.llvm.org/D46116</a><br>
<br>
Files:<br>
lib/Target/NVPTX/NVPTXISelLowering.cpp<br>
test/CodeGen/NVPTX/f16x2-instructions.ll<br>
<br>
<br>
Index: test/CodeGen/NVPTX/f16x2-instructions.ll<br>
===================================================================<br>
--- test/CodeGen/NVPTX/f16x2-instructions.ll<br>
+++ test/CodeGen/NVPTX/f16x2-instructions.ll<br>
@@ -1423,5 +1423,13 @@<br>
ret <2 x half> %r<br>
}<br>
<br>
+; CHECK-LABEL: test_shufflevector(<br>
+; CHECK: mov.b32 {%h1, %h2}, %hh1;<br>
+; CHECK: mov.b32 %hh2, {%h2, %h1};<br>
+define <2 x half> @test_shufflevector(<2 x half> %a) #0 {<br>
+ %s = shufflevector <2 x half> %a, <2 x half> undef, <2 x i32> <i32 1, i32 0><br>
+ ret <2 x half> %s<br>
+}<br>
+<br>
attributes #0 = { nounwind }<br>
attributes #1 = { "unsafe-fp-math" = "true" }<br>
Index: lib/Target/NVPTX/NVPTXISelLowering.cpp<br>
===================================================================<br>
--- lib/Target/NVPTX/NVPTXISelLowering.cpp<br>
+++ lib/Target/NVPTX/NVPTXISelLowering.cpp<br>
@@ -375,6 +375,7 @@<br>
setOperationAction(ISD::FP_TO_SINT, MVT::f16, Legal);<br>
setOperationAction(ISD::BUILD_VECTOR, MVT::v2f16, Custom);<br>
setOperationAction(ISD::EXTRACT_VECTOR_ELT, MVT::v2f16, Custom);<br>
+ setOperationAction(ISD::VECTOR_SHUFFLE, MVT::v2f16, Expand);<br>
<br>
setFP16OperationAction(ISD::SETCC, MVT::f16, Legal, Promote);<br>
setFP16OperationAction(ISD::SETCC, MVT::v2f16, Legal, Expand);<br>
<br>
<br>
</blockquote></div>