[X86] Use IsProfitableToFold to block vinsertf128rm in favor of insert_subreg instead...
authorCraig Topper <craig.topper@intel.com>
Tue, 10 Jul 2018 06:19:54 +0000 (06:19 +0000)
committerCraig Topper <craig.topper@intel.com>
Tue, 10 Jul 2018 06:19:54 +0000 (06:19 +0000)
This is a much more direct way to solve the issue than just giving extra priority.

llvm-svn: 336639

llvm/lib/Target/X86/X86ISelDAGToDAG.cpp
llvm/lib/Target/X86/X86InstrVecCompiler.td

index c7120cf..3b903da 100644 (file)
@@ -614,6 +614,11 @@ X86DAGToDAGISel::IsProfitableToFold(SDValue N, SDNode *U, SDNode *Root) const {
     }
   }
 
+  // Prevent folding a load if this can implemented with an insert_subreg.
+  if (Root->getOpcode() == ISD::INSERT_SUBVECTOR &&
+      Root->getOperand(0).isUndef() && isNullConstant(Root->getOperand(2)))
+    return false;
+
   return true;
 }
 
index 6f0bf4b..30e467c 100644 (file)
@@ -147,7 +147,6 @@ multiclass subvector_subreg_lowering<RegisterClass subRC, ValueType subVT,
   def : Pat<(subVT (extract_subvector (VT RC:$src), (iPTR 0))),
             (subVT (EXTRACT_SUBREG RC:$src, subIdx))>;
 
-  let AddedComplexity = 25 in // to give priority over vinsertf128rm
   def : Pat<(VT (insert_subvector undef, subRC:$src, (iPTR 0))),
             (VT (INSERT_SUBREG (IMPLICIT_DEF), subRC:$src, subIdx))>;
 }