<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>