mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-22 20:20:03 +00:00
43afab3bdb
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
25 lines
696 B
LLVM
25 lines
696 B
LLVM
; RUN: not llvm-as < %s >/dev/null 2> %t
|
|
; RUN: FileCheck %s < %t
|
|
; Test that a vector pointer may be used with a scalar index.
|
|
; Test that a vector pointer and vector index should have the same vector width
|
|
|
|
; This code is correct
|
|
define <2 x i32*> @test2(<2 x i32*> %a) {
|
|
%w = getelementptr i32, <2 x i32*> %a, i32 2
|
|
ret <2 x i32*> %w
|
|
}
|
|
|
|
; This code is correct
|
|
define <2 x i32*> @test3(i32* %a) {
|
|
%w = getelementptr i32, i32* %a, <2 x i32> <i32 2, i32 2>
|
|
ret <2 x i32*> %w
|
|
}
|
|
|
|
; CHECK: getelementptr vector index has a wrong number of elements
|
|
|
|
define <2 x i32> @test1(<2 x i32*> %a) {
|
|
%w = getelementptr i32, <2 x i32*> %a, <4 x i32><i32 2, i32 2, i32 2, i32 2>
|
|
ret <2 x i32> %w
|
|
}
|
|
|