[llvm] r236530 - [DAGCombiner] Account for getVectorIdxTy() when narrowing vector load
Ulrich Weigand
ulrich.weigand at de.ibm.com
Tue May 5 12:34:10 PDT 2015
Author: uweigand
Date: Tue May 5 14:34:10 2015
New Revision: 236530
URL: http://llvm.org/viewvc/llvm-project?rev=236530&view=rev
Log:
[DAGCombiner] Account for getVectorIdxTy() when narrowing vector load
This patch makes ReplaceExtractVectorEltOfLoadWithNarrowedLoad convert
the element number from getVectorIdxTy() to PtrTy before doing pointer
arithmetic on it. This is needed on z, where element numbers are i32
but pointers are i64.
Original patch by Richard Sandiford.
Added:
llvm/trunk/test/CodeGen/SystemZ/vec-extract-02.ll
Modified:
llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=236530&r1=236529&r2=236530&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Tue May 5 14:34:10 2015
@@ -11416,9 +11416,10 @@ SDValue DAGCombiner::ReplaceExtractVecto
Offset = DAG.getConstant(PtrOff, DL, PtrType);
MPI = OriginalLoad->getPointerInfo().getWithOffset(PtrOff);
} else {
+ Offset = DAG.getZExtOrTrunc(EltNo, DL, PtrType);
Offset = DAG.getNode(
- ISD::MUL, DL, EltNo.getValueType(), EltNo,
- DAG.getConstant(VecEltVT.getStoreSize(), DL, EltNo.getValueType()));
+ ISD::MUL, DL, PtrType, Offset,
+ DAG.getConstant(VecEltVT.getStoreSize(), DL, PtrType));
MPI = OriginalLoad->getPointerInfo();
}
NewPtr = DAG.getNode(ISD::ADD, DL, PtrType, NewPtr, Offset);
Added: llvm/trunk/test/CodeGen/SystemZ/vec-extract-02.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/SystemZ/vec-extract-02.ll?rev=236530&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/SystemZ/vec-extract-02.ll (added)
+++ llvm/trunk/test/CodeGen/SystemZ/vec-extract-02.ll Tue May 5 14:34:10 2015
@@ -0,0 +1,15 @@
+; Verify ReplaceExtractVectorEltOfLoadWithNarrowedLoad fixes
+;
+; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
+
+; Test a case where a vector extraction can be simplified to a scalar load.
+; The index must be extended from i32 to i64.
+define i32 @f1(<4 x i32> *%ptr, i32 %index) {
+; CHECK-LABEL: f1:
+; CHECK: risbg {{%r[0-5]}}, %r3, 30, 189, 2
+; CHECK: l %r2,
+; CHECK: br %r14
+ %vec = load <4 x i32>, <4 x i32> *%ptr
+ %res = extractelement <4 x i32> %vec, i32 %index
+ ret i32 %res
+}
More information about the llvm-commits
mailing list