<div dir="ltr">This change is incomplete. The tests for these intrinsics need to be moved from avx512dq-intrinsics.ll to avx512dq-intrinsics-upgrade.ll and from <br><br>avx512dqvl-intrinsics.ll to avx512dqvl-intrinsics-upgrade.ll.<br>







</div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature" data-smartmail="gmail_signature">~Craig</div></div>
<br><div class="gmail_quote">On Sun, Sep 10, 2017 at 1:40 AM, Uriel Korach via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: uriel.k<br>
Date: Sun Sep 10 01:40:13 2017<br>
New Revision: 312879<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=312879&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=312879&view=rev</a><br>
Log:<br>
adding autoUpgrade support to broadcast[f|i]32x2 intrinsics<br>
<br>
Modified:<br>
    llvm/trunk/include/llvm/IR/<wbr>IntrinsicsX86.td<br>
    llvm/trunk/lib/IR/AutoUpgrade.<wbr>cpp<br>
    llvm/trunk/lib/Target/X86/<wbr>X86IntrinsicsInfo.h<br>
<br>
Modified: llvm/trunk/include/llvm/IR/<wbr>IntrinsicsX86.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/IntrinsicsX86.td?rev=312879&r1=312878&r2=312879&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/include/<wbr>llvm/IR/IntrinsicsX86.td?rev=<wbr>312879&r1=312878&r2=312879&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/include/llvm/IR/<wbr>IntrinsicsX86.td (original)<br>
+++ llvm/trunk/include/llvm/IR/<wbr>IntrinsicsX86.td Sun Sep 10 01:40:13 2017<br>
@@ -4414,26 +4414,6 @@ let TargetPrefix = "x86" in {  // All in<br>
   def int_x86_avx512_vbroadcast_sd_<wbr>512 :<br>
         Intrinsic<[llvm_v8f64_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;<br>
<br>
-  def int_x86_avx512_mask_<wbr>broadcastf32x2_256 :<br>
-          Intrinsic<[llvm_v8f32_ty],<br>
-                    [llvm_v4f32_ty, llvm_v8f32_ty, llvm_i8_ty], [IntrNoMem]>;<br>
-<br>
-  def int_x86_avx512_mask_<wbr>broadcastf32x2_512 :<br>
-          Intrinsic<[llvm_v16f32_ty],<br>
-                    [llvm_v4f32_ty, llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;<br>
-<br>
-  def int_x86_avx512_mask_<wbr>broadcasti32x2_128 :<br>
-          Intrinsic<[llvm_v4i32_ty],<br>
-                    [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;<br>
-<br>
-  def int_x86_avx512_mask_<wbr>broadcasti32x2_256 :<br>
-          Intrinsic<[llvm_v8i32_ty],<br>
-                    [llvm_v4i32_ty, llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;<br>
-<br>
-  def int_x86_avx512_mask_<wbr>broadcasti32x2_512 :<br>
-          Intrinsic<[llvm_v16i32_ty],<br>
-                    [llvm_v4i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;<br>
-<br>
    def int_x86_avx512_broadcastmw_512 :<br>
           GCCBuiltin<"__builtin_ia32_<wbr>broadcastmw512">,<br>
           Intrinsic<[llvm_v16i32_ty], [llvm_i16_ty], [IntrNoMem]>;<br>
<br>
Modified: llvm/trunk/lib/IR/AutoUpgrade.<wbr>cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/AutoUpgrade.cpp?rev=312879&r1=312878&r2=312879&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/IR/<wbr>AutoUpgrade.cpp?rev=312879&r1=<wbr>312878&r2=312879&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/IR/AutoUpgrade.<wbr>cpp (original)<br>
+++ llvm/trunk/lib/IR/AutoUpgrade.<wbr>cpp Sun Sep 10 01:40:13 2017<br>
@@ -72,7 +72,9 @@ static bool ShouldUpgradeX86Intrinsic(Fu<br>
   // like to use this information to remove upgrade code for some older<br>
   // intrinsics. It is currently undecided how we will determine that future<br>
   // point.<br>
-  if (Name.startswith("sse2.pcmpeq.<wbr>") || // Added in 3.1<br>
+  if (Name.startswith("avx512.mask.<wbr>broadcastf32x2") || // Added in 6.0<br>
+      Name.startswith("avx512.mask.<wbr>broadcasti32x2") || // Added in 6.0<br>
+      Name.startswith("sse2.pcmpeq."<wbr>) || // Added in 3.1<br>
       Name.startswith("sse2.pcmpgt."<wbr>) || // Added in 3.1<br>
       Name.startswith("avx2.pcmpeq."<wbr>) || // Added in 3.1<br>
       Name.startswith("avx2.pcmpgt."<wbr>) || // Added in 3.1<br>
@@ -803,6 +805,20 @@ static Value *upgradeIntMinMax(IRBuilder<br>
   return Res;<br>
 }<br>
<br>
+static Value *upgradeBroadcastf32x2(<wbr>IRBuilder<> &Builder, CallInst &CI) {<br>
+  Value *Op0 = CI.getArgOperand(0);<br>
+  Value *RetArg = CI.getReturnedArgOperand();<br>
+<br>
+  llvm::VectorType *Ty = RetArg->getType();<br>
+  unsigned NumElts = Ty->getVectorNumElements();<br>
+  uint32_t Indices[NumElts];<br>
+  for(unsigned i = 0; i < NumElts; ++i)<br>
+    Indices[i] = i % 2;<br>
+<br>
+  Value *Res = Builder.CreateShuffleVector(<wbr>Op0,UndefValue::get(Ty),<wbr>Indices);<br>
+  return EmitX86Select(Builder, CI.getArgOperand(2), Res, CI.getArgOperand(1));<br>
+}<br>
+<br>
 static Value *upgradeMaskedCompare(<wbr>IRBuilder<> &Builder, CallInst &CI,<br>
                                    unsigned CC, bool Signed) {<br>
   Value *Op0 = CI.getArgOperand(0);<br>
@@ -1059,6 +1075,9 @@ void llvm::UpgradeIntrinsicCall(<wbr>CallInst<br>
                          Name.startswith("avx2.pmaxs") ||<br>
                          Name.startswith("avx512.mask.<wbr>pmaxs"))) {<br>
       Rep = upgradeIntMinMax(Builder, *CI, ICmpInst::ICMP_SGT);<br>
+    } else if (IsX86 && (Name.startswith("avx512.mask.<wbr>broadcastf32x2") ||<br>
+                         Name.startswith("avx512.mask.<wbr>broadcasti32x2"))) {<br>
+        Rep =upgradeBroadcastf32x2(<wbr>Builder, *CI);<br>
     } else if (IsX86 && (Name == "sse2.pmaxu.b" ||<br>
                          Name == "sse41.pmaxuw" ||<br>
                          Name == "sse41.pmaxud" ||<br>
<br>
Modified: llvm/trunk/lib/Target/X86/<wbr>X86IntrinsicsInfo.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86IntrinsicsInfo.h?rev=312879&r1=312878&r2=312879&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/Target/<wbr>X86/X86IntrinsicsInfo.h?rev=<wbr>312879&r1=312878&r2=312879&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Target/X86/<wbr>X86IntrinsicsInfo.h (original)<br>
+++ llvm/trunk/lib/Target/X86/<wbr>X86IntrinsicsInfo.h Sun Sep 10 01:40:13 2017<br>
@@ -478,16 +478,6 @@ static const IntrinsicData  IntrinsicsWi<br>
                      X86ISD::FADDS_RND, 0),<br>
   X86_INTRINSIC_DATA(avx512_<wbr>mask_add_ss_round, INTR_TYPE_SCALAR_MASK_RM,<br>
                      X86ISD::FADDS_RND, 0),<br>
-  X86_INTRINSIC_DATA(avx512_<wbr>mask_broadcastf32x2_256, BRCST32x2_TO_VEC,<br>
-                     X86ISD::VBROADCAST, 0),<br>
-  X86_INTRINSIC_DATA(avx512_<wbr>mask_broadcastf32x2_512, BRCST32x2_TO_VEC,<br>
-                     X86ISD::VBROADCAST, 0),<br>
-  X86_INTRINSIC_DATA(avx512_<wbr>mask_broadcasti32x2_128, BRCST32x2_TO_VEC,<br>
-                     X86ISD::VBROADCAST, 0),<br>
-  X86_INTRINSIC_DATA(avx512_<wbr>mask_broadcasti32x2_256, BRCST32x2_TO_VEC,<br>
-                     X86ISD::VBROADCAST, 0),<br>
-  X86_INTRINSIC_DATA(avx512_<wbr>mask_broadcasti32x2_512, BRCST32x2_TO_VEC,<br>
-                     X86ISD::VBROADCAST, 0),<br>
   X86_INTRINSIC_DATA(avx512_<wbr>mask_cmp_pd_128, CMP_MASK_CC, X86ISD::CMPM, 0),<br>
   X86_INTRINSIC_DATA(avx512_<wbr>mask_cmp_pd_256, CMP_MASK_CC, X86ISD::CMPM, 0),<br>
   X86_INTRINSIC_DATA(avx512_<wbr>mask_cmp_pd_512, CMP_MASK_CC, X86ISD::CMPM,<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>