[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