<div dir="ltr">Hello Sean,<br><br>It looks like this commit added a warning to one of our builders:<br><br>llvm/unittests/ProfileData/InstrProfTest.cpp:1027:42: warning: ISO C99 requires rest arguments to be used [enabled by default]<br><br><a href="http://lab.llvm.org:8011/builders/clang-lld-x86_64-2stage">http://lab.llvm.org:8011/builders/clang-lld-x86_64-2stage</a><br><br>Please have a look at this?<br><br>Thanks<br><br>Galina<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jan 26, 2017 at 10:59 AM, Sean Fertile 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: sfertile<br>
Date: Thu Jan 26 12:59:15 2017<br>
New Revision: 293200<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=293200&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=293200&view=rev</a><br>
Log:<br>
[PPC] cleanup of mayLoad/mayStore flags and memory operands.<br>
<br>
1) Explicitly sets mayLoad/mayStore property in the tablegen files on load/store<br>
   instructions.<br>
2) Updated the flags on a number of intrinsics indicating that they write<br>
    memory.<br>
3) Added SDNPMemOperand flags for some target dependent SDNodes so that they<br>
   propagate their memory operand<br>
<br>
Review: <a href="https://reviews.llvm.org/D28818" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D28818</a><br>
<br>
Modified:<br>
    llvm/trunk/include/llvm/IR/<wbr>IntrinsicsPowerPC.td<br>
    llvm/trunk/lib/Target/PowerPC/<wbr>PPCISelDAGToDAG.cpp<br>
    llvm/trunk/lib/Target/PowerPC/<wbr>PPCInstr64Bit.td<br>
    llvm/trunk/lib/Target/PowerPC/<wbr>PPCInstrAltivec.td<br>
    llvm/trunk/lib/Target/PowerPC/<wbr>PPCInstrInfo.td<br>
    llvm/trunk/lib/Target/PowerPC/<wbr>PPCInstrVSX.td<br>
    llvm/trunk/test/CodeGen/<wbr>PowerPC/swaps-le-7.ll<br>
<br>
Modified: llvm/trunk/include/llvm/IR/<wbr>IntrinsicsPowerPC.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/IntrinsicsPowerPC.td?rev=293200&r1=293199&r2=293200&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/include/<wbr>llvm/IR/IntrinsicsPowerPC.td?<wbr>rev=293200&r1=293199&r2=<wbr>293200&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/include/llvm/IR/<wbr>IntrinsicsPowerPC.td (original)<br>
+++ llvm/trunk/include/llvm/IR/<wbr>IntrinsicsPowerPC.td Thu Jan 26 12:59:15 2017<br>
@@ -203,19 +203,19 @@ let TargetPrefix = "ppc" in {  // All in<br>
   // source address with a single pointer.<br>
   def int_ppc_altivec_stvx :<br>
               Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty],<br>
-                        [IntrArgMemOnly]>;<br>
+                        [IntrWriteMem, IntrArgMemOnly]>;<br>
   def int_ppc_altivec_stvxl :<br>
               Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty],<br>
-                        [IntrArgMemOnly]>;<br>
+                        [IntrWriteMem, IntrArgMemOnly]>;<br>
   def int_ppc_altivec_stvebx :<br>
               Intrinsic<[], [llvm_v16i8_ty, llvm_ptr_ty],<br>
-                        [IntrArgMemOnly]>;<br>
+                        [IntrWriteMem, IntrArgMemOnly]>;<br>
   def int_ppc_altivec_stvehx :<br>
               Intrinsic<[], [llvm_v8i16_ty, llvm_ptr_ty],<br>
-                        [IntrArgMemOnly]>;<br>
+                        [IntrWriteMem, IntrArgMemOnly]>;<br>
   def int_ppc_altivec_stvewx :<br>
               Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty],<br>
-                        [IntrArgMemOnly]>;<br>
+                        [IntrWriteMem, IntrArgMemOnly]>;<br>
<br>
   // Comparisons setting a vector.<br>
   def int_ppc_altivec_vcmpbfp : GCCBuiltin<"__builtin_altivec_<wbr>vcmpbfp">,<br>
@@ -749,20 +749,20 @@ def int_ppc_vsx_lxvll :<br>
       IntrArgMemOnly]>;<br>
 def int_ppc_vsx_stxvl :<br>
       Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty, llvm_i64_ty],<br>
-      [IntrArgMemOnly]>;<br>
+      [IntrWriteMem, IntrArgMemOnly]>;<br>
 def int_ppc_vsx_stxvll :<br>
       Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty, llvm_i64_ty],<br>
-      [IntrArgMemOnly]>;<br>
+      [IntrWriteMem, IntrArgMemOnly]>;<br>
<br>
 // Vector store.<br>
-def int_ppc_vsx_stxvw4x :<br>
-      Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty], [IntrArgMemOnly]>;<br>
-def int_ppc_vsx_stxvd2x :<br>
-      Intrinsic<[], [llvm_v2f64_ty, llvm_ptr_ty], [IntrArgMemOnly]>;<br>
-def int_ppc_vsx_stxvw4x_be :<br>
-      Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty], [IntrArgMemOnly]>;<br>
-def int_ppc_vsx_stxvd2x_be :<br>
-      Intrinsic<[], [llvm_v2f64_ty, llvm_ptr_ty], [IntrArgMemOnly]>;<br>
+def int_ppc_vsx_stxvw4x : Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty],<br>
+                                    [IntrWriteMem, IntrArgMemOnly]>;<br>
+def int_ppc_vsx_stxvd2x : Intrinsic<[], [llvm_v2f64_ty, llvm_ptr_ty],<br>
+                                    [IntrWriteMem, IntrArgMemOnly]>;<br>
+def int_ppc_vsx_stxvw4x_be : Intrinsic<[], [llvm_v4i32_ty, llvm_ptr_ty],<br>
+                                       [IntrWriteMem, IntrArgMemOnly]>;<br>
+def int_ppc_vsx_stxvd2x_be : Intrinsic<[], [llvm_v2f64_ty, llvm_ptr_ty],<br>
+                                       [IntrWriteMem, IntrArgMemOnly]>;<br>
 // Vector and scalar maximum.<br>
 def int_ppc_vsx_xvmaxdp : PowerPC_VSX_Vec_DDD_Intrinsic<<wbr>"xvmaxdp">;<br>
 def int_ppc_vsx_xvmaxsp : PowerPC_VSX_Vec_FFF_Intrinsic<<wbr>"xvmaxsp">;<br>
@@ -953,7 +953,7 @@ class PowerPC_QPX_LoadPerm_<wbr>Intrinsic<str<br>
 class PowerPC_QPX_Store_Intrinsic<<wbr>string GCCIntSuffix><br>
   : PowerPC_QPX_Intrinsic<<wbr>GCCIntSuffix,<br>
                           [], [llvm_v4f64_ty, llvm_ptr_ty],<br>
-                          [IntrArgMemOnly]>;<br>
+                          [IntrWriteMem, IntrArgMemOnly]>;<br>
<br>
 //===-------------------------<wbr>------------------------------<wbr>---------------===//<br>
 // PowerPC QPX Intrinsic Definitions.<br>
<br>
Modified: llvm/trunk/lib/Target/PowerPC/<wbr>PPCISelDAGToDAG.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCISelDAGToDAG.cpp?rev=293200&r1=293199&r2=293200&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/Target/<wbr>PowerPC/PPCISelDAGToDAG.cpp?<wbr>rev=293200&r1=293199&r2=<wbr>293200&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Target/PowerPC/<wbr>PPCISelDAGToDAG.cpp (original)<br>
+++ llvm/trunk/lib/Target/PowerPC/<wbr>PPCISelDAGToDAG.cpp Thu Jan 26 12:59:15 2017<br>
@@ -2964,7 +2964,11 @@ void PPCDAGToDAGISel::Select(SDNode *N)<br>
             SelectAddrIdxOnly(LD-><wbr>getBasePtr(), Base, Offset)) {<br>
           SDValue Chain = LD->getChain();<br>
           SDValue Ops[] = { Base, Offset, Chain };<br>
-          CurDAG->SelectNodeTo(N, PPC::LXVDSX, N->getValueType(0), Ops);<br>
+          SDNode *NewN = CurDAG->SelectNodeTo(N, PPC::LXVDSX,<br>
+                                              N->getValueType(0), Ops);<br>
+          MachineSDNode::mmo_iterator MemOp = MF->allocateMemRefsArray(1);<br>
+          MemOp[0] = LD->getMemOperand();<br>
+          cast<MachineSDNode>(NewN)-><wbr>setMemRefs(MemOp, MemOp + 1);<br>
           return;<br>
         }<br>
       }<br>
<br>
Modified: llvm/trunk/lib/Target/PowerPC/<wbr>PPCInstr64Bit.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCInstr64Bit.td?rev=293200&r1=293199&r2=293200&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/Target/<wbr>PowerPC/PPCInstr64Bit.td?rev=<wbr>293200&r1=293199&r2=293200&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Target/PowerPC/<wbr>PPCInstr64Bit.td (original)<br>
+++ llvm/trunk/lib/Target/PowerPC/<wbr>PPCInstr64Bit.td Thu Jan 26 12:59:15 2017<br>
@@ -253,11 +253,11 @@ def LDAT : X_RD5_RS5_IM5<31, 614, (outs<br>
            Requires<[IsISA3_0]>;<br>
 }<br>
<br>
-let Defs = [CR0], mayStore = 1, hasSideEffects = 0 in<br>
+let Defs = [CR0], mayStore = 1, mayLoad = 0, hasSideEffects = 0 in<br>
 def STDCX : XForm_1<31, 214, (outs), (ins g8rc:$rS, memrr:$dst),<br>
                     "stdcx. $rS, $dst", IIC_LdStSTDCX, []>, isDOT;<br>
<br>
-let mayStore = 1, hasSideEffects = 0 in<br>
+let mayStore = 1, mayLoad = 0, hasSideEffects = 0 in<br>
 def STDAT : X_RD5_RS5_IM5<31, 742, (outs), (ins g8rc:$rS, g8rc:$rA, u5imm:$FC),<br>
                           "stdat $rS, $rA, $FC", IIC_LdStStore>, isPPC64,<br>
             Requires<[IsISA3_0]>;<br>
@@ -1082,7 +1082,7 @@ def STDBRX: XForm_8<31, 660, (outs), (in<br>
 }<br>
<br>
 // Stores with Update (pre-inc).<br>
-let PPC970_Unit = 2, mayStore = 1 in {<br>
+let PPC970_Unit = 2, mayStore = 1, mayLoad = 0 in {<br>
 let Interpretation64Bit = 1, isCodeGenOnly = 1 in {<br>
 def STBU8 : DForm_1<39, (outs ptr_rc_nor0:$ea_res), (ins g8rc:$rS, memri:$dst),<br>
                    "stbu $rS, $dst", IIC_LdStStoreUpd, []>,<br>
<br>
Modified: llvm/trunk/lib/Target/PowerPC/<wbr>PPCInstrAltivec.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCInstrAltivec.td?rev=293200&r1=293199&r2=293200&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/Target/<wbr>PowerPC/PPCInstrAltivec.td?<wbr>rev=293200&r1=293199&r2=<wbr>293200&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Target/PowerPC/<wbr>PPCInstrAltivec.td (original)<br>
+++ llvm/trunk/lib/Target/PowerPC/<wbr>PPCInstrAltivec.td Thu Jan 26 12:59:15 2017<br>
@@ -407,7 +407,7 @@ def MTVSCR : VXForm_5<1604, (outs), (ins<br>
                       "mtvscr $vB", IIC_LdStLoad,<br>
                       [(int_ppc_altivec_mtvscr v4i32:$vB)]>;<br>
<br>
-let PPC970_Unit = 2 in {  // Loads.<br>
+let PPC970_Unit = 2, mayLoad = 1, mayStore = 0 in {  // Loads.<br>
 def LVEBX: XForm_1<31,   7, (outs vrrc:$vD), (ins memrr:$src),<br>
                    "lvebx $vD, $src", IIC_LdStLoad,<br>
                    [(set v16i8:$vD, (int_ppc_altivec_lvebx xoaddr:$src))]>;<br>
@@ -434,7 +434,7 @@ def LVSR : XForm_1<31,  38, (outs vrrc:$<br>
                    [(set v16i8:$vD, (int_ppc_altivec_lvsr xoaddr:$src))]>,<br>
                    PPC970_Unit_LSU;<br>
<br>
-let PPC970_Unit = 2 in {   // Stores.<br>
+let PPC970_Unit = 2, mayStore = 1, mayLoad = 0 in {   // Stores.<br>
 def STVEBX: XForm_8<31, 135, (outs), (ins vrrc:$rS, memrr:$dst),<br>
                    "stvebx $rS, $dst", IIC_LdStStore,<br>
                    [(int_ppc_altivec_stvebx v16i8:$rS, xoaddr:$dst)]>;<br>
<br>
Modified: llvm/trunk/lib/Target/PowerPC/<wbr>PPCInstrInfo.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.td?rev=293200&r1=293199&r2=293200&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/Target/<wbr>PowerPC/PPCInstrInfo.td?rev=<wbr>293200&r1=293199&r2=293200&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Target/PowerPC/<wbr>PPCInstrInfo.td (original)<br>
+++ llvm/trunk/lib/Target/PowerPC/<wbr>PPCInstrInfo.td Thu Jan 26 12:59:15 2017<br>
@@ -114,9 +114,9 @@ def PPCfctiwuz: SDNode<"PPCISD::FCTIWUZ"<br>
 def PPCstfiwx : SDNode<"PPCISD::STFIWX", SDT_PPCstfiwx,<br>
                        [SDNPHasChain, SDNPMayStore]>;<br>
 def PPClfiwax : SDNode<"PPCISD::LFIWAX", SDT_PPClfiwx,<br>
-                       [SDNPHasChain, SDNPMayLoad]>;<br>
+                       [SDNPHasChain, SDNPMayLoad, SDNPMemOperand]>;<br>
 def PPClfiwzx : SDNode<"PPCISD::LFIWZX", SDT_PPClfiwx,<br>
-                       [SDNPHasChain, SDNPMayLoad]>;<br>
+                       [SDNPHasChain, SDNPMayLoad, SDNPMemOperand]>;<br>
 def PPClxsizx : SDNode<"PPCISD::LXSIZX", SDT_PPCLxsizx,<br>
                        [SDNPHasChain, SDNPMayLoad]>;<br>
 def PPCstxsix : SDNode<"PPCISD::STXSIX", SDT_PPCstxsix,<br>
@@ -243,7 +243,7 @@ def PPCcondbranch : SDNode<"PPCISD::COND<br>
                            [SDNPHasChain, SDNPOptInGlue]>;<br>
<br>
 def PPClbrx       : SDNode<"PPCISD::LBRX", SDT_PPClbrx,<br>
-                           [SDNPHasChain, SDNPMayLoad]>;<br>
+                           [SDNPHasChain, SDNPMayLoad, SDNPMemOperand]>;<br>
 def PPCstbrx      : SDNode<"PPCISD::STBRX", SDT_PPCstbrx,<br>
                            [SDNPHasChain, SDNPMayStore]>;<br>
<br>
@@ -1642,7 +1642,7 @@ let usesCustomInserter = 1 in {<br>
 }<br>
<br>
 // Instructions to support atomic operations<br>
-let mayLoad = 1, hasSideEffects = 0 in {<br>
+let mayLoad = 1, mayStore = 0, hasSideEffects = 0 in {<br>
 def LBARX : XForm_1<31,  52, (outs gprc:$rD), (ins memrr:$src),<br>
                     "lbarx $rD, $src", IIC_LdStLWARX, []>,<br>
                     Requires<[HasPartwordAtomics]><wbr>;<br>
@@ -1675,7 +1675,7 @@ def LWAT : X_RD5_RS5_IM5<31, 582, (outs<br>
            Requires<[IsISA3_0]>;<br>
 }<br>
<br>
-let Defs = [CR0], mayStore = 1, hasSideEffects = 0 in {<br>
+let Defs = [CR0], mayStore = 1, mayLoad = 0, hasSideEffects = 0 in {<br>
 def STBCX : XForm_1<31, 694, (outs), (ins gprc:$rS, memrr:$dst),<br>
                     "stbcx. $rS, $dst", IIC_LdStSTWCX, []>,<br>
                     isDOT, Requires<[HasPartwordAtomics]><wbr>;<br>
@@ -1688,7 +1688,7 @@ def STWCX : XForm_1<31, 150, (outs), (in<br>
                     "stwcx. $rS, $dst", IIC_LdStSTWCX, []>, isDOT;<br>
 }<br>
<br>
-let mayStore = 1, hasSideEffects = 0 in<br>
+let mayStore = 1, mayLoad = 0, hasSideEffects = 0 in<br>
 def STWAT : X_RD5_RS5_IM5<31, 710, (outs), (ins gprc:$rS, gprc:$rA, u5imm:$FC),<br>
                           "stwat $rS, $rA, $FC", IIC_LdStStore>,<br>
             Requires<[IsISA3_0]>;<br>
@@ -1734,7 +1734,7 @@ def LFD : DForm_1<50, (outs f8rc:$rD), (<br>
<br>
<br>
 // Unindexed (r+i) Loads with Update (preinc).<br>
-let mayLoad = 1, hasSideEffects = 0 in {<br>
+let mayLoad = 1, mayStore = 0, hasSideEffects = 0 in {<br>
 def LBZU : DForm_1<35, (outs gprc:$rD, ptr_rc_nor0:$ea_result), (ins memri:$addr),<br>
                    "lbzu $rD, $addr", IIC_LdStLoadUpd,<br>
                    []>, RegConstraint<"$addr.reg = $ea_result">,<br>
@@ -1807,7 +1807,7 @@ def LFDUX : XForm_1<31, 631, (outs f8rc:<br>
<br>
 // Indexed (r+r) Loads.<br>
 //<br>
-let PPC970_Unit = 2 in {<br>
+let PPC970_Unit = 2, mayLoad = 1, mayStore = 0 in {<br>
 def LBZX : XForm_1<31,  87, (outs gprc:$rD), (ins memrr:$src),<br>
                    "lbzx $rD, $src", IIC_LdStLoad,<br>
                    [(set i32:$rD, (zextloadi8 xaddr:$src))]>;<br>
@@ -1821,8 +1821,6 @@ def LHZX : XForm_1<31, 279, (outs gprc:$<br>
 def LWZX : XForm_1<31,  23, (outs gprc:$rD), (ins memrr:$src),<br>
                    "lwzx $rD, $src", IIC_LdStLoad,<br>
                    [(set i32:$rD, (load xaddr:$src))]>;<br>
-<br>
-<br>
 def LHBRX : XForm_1<31, 790, (outs gprc:$rD), (ins memrr:$src),<br>
                    "lhbrx $rD, $src", IIC_LdStLoad,<br>
                    [(set i32:$rD, (PPClbrx xoaddr:$src, i16))]>;<br>
@@ -1854,7 +1852,7 @@ def LMW : DForm_1<46, (outs gprc:$rD), (<br>
 //<br>
<br>
 // Unindexed (r+i) Stores.<br>
-let PPC970_Unit = 2 in {<br>
+let PPC970_Unit = 2, mayStore = 1, mayLoad = 0 in {<br>
 def STB  : DForm_1<38, (outs), (ins gprc:$rS, memri:$src),<br>
                    "stb $rS, $src", IIC_LdStStore,<br>
                    [(truncstorei8 i32:$rS, iaddr:$src)]>;<br>
@@ -1873,7 +1871,7 @@ def STFD : DForm_1<54, (outs), (ins f8rc<br>
 }<br>
<br>
 // Unindexed (r+i) Stores with Update (preinc).<br>
-let PPC970_Unit = 2, mayStore = 1 in {<br>
+let PPC970_Unit = 2, mayStore = 1, mayLoad = 0 in {<br>
 def STBU  : DForm_1<39, (outs ptr_rc_nor0:$ea_res), (ins gprc:$rS, memri:$dst),<br>
                     "stbu $rS, $dst", IIC_LdStStoreUpd, []>,<br>
                     RegConstraint<"$dst.reg = $ea_res">, NoEncode<"$ea_res">;<br>
@@ -1942,7 +1940,7 @@ def STFDX : XForm_28<31, 727, (outs), (i<br>
 }<br>
<br>
 // Indexed (r+r) Stores with Update (preinc).<br>
-let PPC970_Unit = 2, mayStore = 1 in {<br>
+let PPC970_Unit = 2, mayStore = 1, mayLoad = 0 in {<br>
 def STBUX : XForm_8<31, 247, (outs ptr_rc_nor0:$ea_res), (ins gprc:$rS, memrr:$dst),<br>
                     "stbux $rS, $dst", IIC_LdStStoreUpd, []>,<br>
                     RegConstraint<"$dst.ptrreg = $ea_res">, NoEncode<"$ea_res">,<br>
<br>
Modified: llvm/trunk/lib/Target/PowerPC/<wbr>PPCInstrVSX.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCInstrVSX.td?rev=293200&r1=293199&r2=293200&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/Target/<wbr>PowerPC/PPCInstrVSX.td?rev=<wbr>293200&r1=293199&r2=293200&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Target/PowerPC/<wbr>PPCInstrVSX.td (original)<br>
+++ llvm/trunk/lib/Target/PowerPC/<wbr>PPCInstrVSX.td Thu Jan 26 12:59:15 2017<br>
@@ -62,7 +62,7 @@ def SDTVecConv : SDTypeProfile<1, 2, [<br>
 ]>;<br>
<br>
 def PPClxvd2x  : SDNode<"PPCISD::LXVD2X", SDT_PPClxvd2x,<br>
-                        [SDNPHasChain, SDNPMayLoad]>;<br>
+                        [SDNPHasChain, SDNPMayLoad, SDNPMemOperand]>;<br>
 def PPCstxvd2x : SDNode<"PPCISD::STXVD2X", SDT_PPCstxvd2x,<br>
                         [SDNPHasChain, SDNPMayStore]>;<br>
 def PPCxxswapd : SDNode<"PPCISD::XXSWAPD", SDT_PPCxxswapd, [SDNPHasChain]>;<br>
@@ -117,7 +117,7 @@ let hasSideEffects = 0 in { // VSX instr<br>
 let Uses = [RM] in {<br>
<br>
   // Load indexed instructions<br>
-  let mayLoad = 1 in {<br>
+  let mayLoad = 1, mayStore = 0 in {<br>
     let CodeSize = 3 in<br>
     def LXSDX : XX1Form<31, 588,<br>
                         (outs vsfrc:$XT), (ins memrr:$src),<br>
@@ -142,7 +142,7 @@ let Uses = [RM] in {<br>
   } // mayLoad<br>
<br>
   // Store indexed instructions<br>
-  let mayStore = 1 in {<br>
+  let mayStore = 1, mayLoad = 0 in {<br>
     let CodeSize = 3 in<br>
     def STXSDX : XX1Form<31, 716,<br>
                         (outs), (ins vsfrc:$XT, memrr:$dst),<br>
@@ -1197,7 +1197,7 @@ let AddedComplexity = 400 in { // Prefer<br>
                        [(set v4i32:$XT, (or v4i32:$XA, (vnot_ppc v4i32:$XB)))]>;<br>
<br>
   // VSX scalar loads introduced in ISA 2.07<br>
-  let mayLoad = 1 in {<br>
+  let mayLoad = 1, mayStore = 0 in {<br>
     let CodeSize = 3 in<br>
     def LXSSPX : XX1Form<31, 524, (outs vssrc:$XT), (ins memrr:$src),<br>
                          "lxsspx $XT, $src", IIC_LdStLFD,<br>
@@ -1211,7 +1211,7 @@ let AddedComplexity = 400 in { // Prefer<br>
   } // mayLoad<br>
<br>
   // VSX scalar stores introduced in ISA 2.07<br>
-  let mayStore = 1 in {<br>
+  let mayStore = 1, mayLoad = 0 in {<br>
     let CodeSize = 3 in<br>
     def STXSSPX : XX1Form<31, 652, (outs), (ins vssrc:$XT, memrr:$dst),<br>
                           "stxsspx $XT, $dst", IIC_LdStSTFD,<br>
@@ -2335,7 +2335,7 @@ let AddedComplexity = 400, Predicates =<br>
<br>
   // When adding new D-Form loads/stores, be sure to update the ImmToIdxMap in<br>
   // PPCRegisterInfo::<wbr>PPCRegisterInfo and maybe save yourself some debugging.<br>
-  let mayLoad = 1 in {<br>
+  let mayLoad = 1, mayStore = 0 in {<br>
   // Load Vector<br>
   def LXV : DQ_RD6_RS5_DQ12<61, 1, (outs vsrc:$XT), (ins memrix16:$src),<br>
                             "lxv $XT, $src", IIC_LdStLFD, []>, UseVSXReg;<br>
@@ -2383,7 +2383,7 @@ let AddedComplexity = 400, Predicates =<br>
<br>
   // When adding new D-Form loads/stores, be sure to update the ImmToIdxMap in<br>
   // PPCRegisterInfo::<wbr>PPCRegisterInfo and maybe save yourself some debugging.<br>
-  let mayStore = 1 in {<br>
+  let mayStore = 1, mayLoad = 0 in {<br>
   // Store Vector<br>
   def STXV : DQ_RD6_RS5_DQ12<61, 5, (outs), (ins vsrc:$XT, memrix16:$dst),<br>
                              "stxv $XT, $dst", IIC_LdStSTFD, []>, UseVSXReg;<br>
<br>
Modified: llvm/trunk/test/CodeGen/<wbr>PowerPC/swaps-le-7.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/swaps-le-7.ll?rev=293200&r1=293199&r2=293200&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>CodeGen/PowerPC/swaps-le-7.ll?<wbr>rev=293200&r1=293199&r2=<wbr>293200&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/CodeGen/<wbr>PowerPC/swaps-le-7.ll (original)<br>
+++ llvm/trunk/test/CodeGen/<wbr>PowerPC/swaps-le-7.ll Thu Jan 26 12:59:15 2017<br>
@@ -11,11 +11,11 @@<br>
 ; CHECK-LABEL: @zg<br>
 ; CHECK: xxspltd<br>
 ; CHECK-NEXT: xxspltd<br>
-; CHECK-NEXT: xxswapd<br>
 ; CHECK-NEXT: xvmuldp<br>
 ; CHECK-NEXT: xvmuldp<br>
 ; CHECK-NEXT: xvsubdp<br>
 ; CHECK-NEXT: xvadddp<br>
+; CHECK-NEXT: xxswapd<br>
 ; CHECK-NEXT: xxpermdi<br>
 ; CHECK-NEXT: xvsubdp<br>
 ; CHECK-NEXT: xxswapd<br>
@@ -52,4 +52,4 @@ L.JA291:<br>
   ret void<br>
 }<br>
<br>
-attributes #0 = { noinline }<br>
\ No newline at end of file<br>
+attributes #0 = { noinline }<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>