Extended syntax of vector version of getelementptr instruction.
authorElena Demikhovsky <elena.demikhovsky@intel.com>
Thu, 9 Jul 2015 07:42:48 +0000 (07:42 +0000)
committerElena Demikhovsky <elena.demikhovsky@intel.com>
Thu, 9 Jul 2015 07:42:48 +0000 (07:42 +0000)
commit43afab3bdb46bc4d3b5568540428920311821891
tree15bf90f2eb1235285e01ab1d803fdba00a094480
parentf959df643a8759cfdd3e882257bff11682882efd
Extended syntax of vector version of getelementptr instruction.

The justification of this change is here: http://lists.cs.uiuc.edu/pipermail/llvmdev/2015-March/082989.html

According to the current GEP syntax, vector GEP requires that each index must be a vector with the same number of elements.

%A = getelementptr i8, <4 x i8*> %ptrs, <4 x i64> %offsets

In this implementation I let each index be or vector or scalar. All vector indices must have the same number of elements. The scalar value will mean the splat vector value.

(1) %A = getelementptr i8, i8* %ptr, <4 x i64> %offsets
or
(2) %A = getelementptr i8, <4 x i8*> %ptrs, i64 %offset

In all cases the %A type is <4 x i8*>

In the case (2) we add the same offset to all pointers.

The case (1) covers C[B[i]] case, when we have the same base C and different offsets B[i].

The documentation is updated.

http://reviews.llvm.org/D10496

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241788 91177308-0d34-0410-b5e6-96231b3b80d8
docs/LangRef.rst
include/llvm/IR/Instructions.h
lib/AsmParser/LLParser.cpp
lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
lib/IR/Verifier.cpp
test/Assembler/getelementptr_vec_idx1.ll
test/Assembler/getelementptr_vec_idx2.ll
test/Assembler/getelementptr_vec_idx3.ll
test/CodeGen/X86/vector-gep.ll