summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/SelectionDAG
diff options
context:
space:
mode:
authorUlrich Weigand <ulrich.weigand@de.ibm.com>2015-05-05 19:33:37 +0000
committerUlrich Weigand <ulrich.weigand@de.ibm.com>2015-05-05 19:33:37 +0000
commitaf2c618e2bc63ede1f79229bcd8d8f9d29e04eee (patch)
treecb39f63e7f01187d691f5710a5f9ab9e7752de10 /llvm/lib/CodeGen/SelectionDAG
parent2693c0a4910c2798ac0f4b8fa092e08b630d5c46 (diff)
downloadbcm5719-llvm-af2c618e2bc63ede1f79229bcd8d8f9d29e04eee.tar.gz
bcm5719-llvm-af2c618e2bc63ede1f79229bcd8d8f9d29e04eee.zip
[DAGCombiner] Fix ReplaceExtractVectorEltOfLoadWithNarrowedLoad for BE
For little-endian, the function would convert (extract_vector_elt (load X), Y) to X + Y*sizeof(elt). For big-endian it would instead use X + sizeof(vec) - Y*sizeof(elt). The big-endian case wasn't right since vector index order always follows memory/array order, even for big-endian. (Note that the current handling has to be wrong for Y==0 since it would access beyond the end of the vector.) Original patch by Richard Sandiford. llvm-svn: 236529
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG')
-rw-r--r--llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp7
1 files changed, 0 insertions, 7 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
index 9319b81d00e..4669d6c2f18 100644
--- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -11413,19 +11413,12 @@ SDValue DAGCombiner::ReplaceExtractVectorEltOfLoadWithNarrowedLoad(
if (auto *ConstEltNo = dyn_cast<ConstantSDNode>(EltNo)) {
int Elt = ConstEltNo->getZExtValue();
unsigned PtrOff = VecEltVT.getSizeInBits() * Elt / 8;
- if (TLI.isBigEndian())
- PtrOff = InVecVT.getSizeInBits() / 8 - PtrOff;
Offset = DAG.getConstant(PtrOff, DL, PtrType);
MPI = OriginalLoad->getPointerInfo().getWithOffset(PtrOff);
} else {
Offset = DAG.getNode(
ISD::MUL, DL, EltNo.getValueType(), EltNo,
DAG.getConstant(VecEltVT.getStoreSize(), DL, EltNo.getValueType()));
- if (TLI.isBigEndian())
- Offset = DAG.getNode(
- ISD::SUB, DL, EltNo.getValueType(),
- DAG.getConstant(InVecVT.getStoreSize(), DL, EltNo.getValueType()),
- Offset);
MPI = OriginalLoad->getPointerInfo();
}
NewPtr = DAG.getNode(ISD::ADD, DL, PtrType, NewPtr, Offset);
OpenPOWER on IntegriCloud