diff options
author | Nadav Rotem <nadav.rotem@intel.com> | 2012-02-05 11:39:23 +0000 |
---|---|---|
committer | Nadav Rotem <nadav.rotem@intel.com> | 2012-02-05 11:39:23 +0000 |
commit | 4f4546b73abd417cb2fa3814d9c15461bb553b19 (patch) | |
tree | 63d2dcef8532ffc488f6df8ae129c5518209a535 /llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | |
parent | a20863e67dac297e818c73f8f773f8ef2ea8ae20 (diff) | |
download | bcm5719-llvm-4f4546b73abd417cb2fa3814d9c15461bb553b19.tar.gz bcm5719-llvm-4f4546b73abd417cb2fa3814d9c15461bb553b19.zip |
Add additional documentation to the extract-and-trunc dagcombine optimization.
llvm-svn: 149823
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 48b9a3939e7..d029906fc31 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -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 && |