Add additional documentation to the extract-and-trunc dagcombine optimization.
authorNadav Rotem <nadav.rotem@intel.com>
Sun, 5 Feb 2012 11:39:23 +0000 (11:39 +0000)
committerNadav Rotem <nadav.rotem@intel.com>
Sun, 5 Feb 2012 11:39:23 +0000 (11:39 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149823 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/DAGCombiner.cpp

index 48b9a3939e7a99d01c77fd2da12a20495c3affc5..d029906fc31ab443cb3a4f1d30bc464e67c61b60 100644 (file)
@@ -4985,9 +4985,14 @@ SDValue DAGCombiner::visitTRUNCATE(SDNode *N) {
       return N0.getOperand(0);
   }
 
-  // Fold Extract-and-trunc into a narrow extract:
-  //    trunc(extract(x)) -> extract(bitcast(x))
-  // We only run this optimization after type legalization (which often
+  // Fold extract-and-trunc into a narrow extract. For example:
+  //   i64 x = EXTRACT_VECTOR_ELT(v2i64 val, i32 1)
+  //   i32 y = TRUNCATE(i64 x)
+  //        -- becomes --
+  //   v16i8 b = BITCAST (v2i64 val)
+  //   i8 x = EXTRACT_VECTOR_ELT(v16i8 b, i32 8)
+  //
+  // Note: We only run this optimization after type legalization (which often
   // creates this pattern) and before operation legalization after which
   // we need to be more careful about the vector instructions that we generate.
   if (N0.getOpcode() == ISD::EXTRACT_VECTOR_ELT &&