OSDN Git Service

getelementptr instruction, support index vector of EVT.
authorIgor Breger <igor.breger@intel.com>
Sun, 1 May 2016 13:29:12 +0000 (13:29 +0000)
committerIgor Breger <igor.breger@intel.com>
Sun, 1 May 2016 13:29:12 +0000 (13:29 +0000)
Differential Revision: http://reviews.llvm.org/D19775

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@268195 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
test/CodeGen/X86/vector-gep.ll

index 25a4d7c..58751b7 100644 (file)
@@ -3245,7 +3245,8 @@ void SelectionDAGBuilder::visitGetElementPtr(const User &I) {
     cast<VectorType>(I.getType())->getVectorNumElements() : 0;
 
   if (VectorWidth && !N.getValueType().isVector()) {
-    MVT VT = MVT::getVectorVT(N.getValueType().getSimpleVT(), VectorWidth);
+    LLVMContext &Context = *DAG.getContext();
+    EVT VT = EVT::getVectorVT(Context, N.getValueType(), VectorWidth);
     SmallVector<SDValue, 16> Ops(VectorWidth, N);
     N = DAG.getNode(ISD::BUILD_VECTOR, dl, VT, Ops);
   }
index 4787836..4c5c348 100644 (file)
@@ -114,3 +114,12 @@ entry:
   ret <4 x i16*> %A
 ;CHECK: ret
 }
+
+;CHECK-LABEL: AGEP9:
+define <64 x i16*> @AGEP9(i16* %param, <64 x i32> %off) nounwind {
+entry:
+;CHECK: vbroadcastss
+  %A = getelementptr i16, i16* %param, <64 x i32> %off
+  ret <64 x i16*> %A
+;CHECK: ret
+}