mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 19:52:54 +01:00
88c04dfc81
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 llvm-svn: 241788
11 lines
338 B
LLVM
11 lines
338 B
LLVM
; RUN: not llvm-as < %s >/dev/null 2> %t
|
|
; RUN: FileCheck %s < %t
|
|
; Test that a vector GEP may be used with a scalar base, the result is a vector of pointers
|
|
|
|
; CHECK: '%w' defined with type '<2 x <4 x i32>*>'
|
|
|
|
define <4 x i32> @test(<4 x i32>* %a) {
|
|
%w = getelementptr <4 x i32>, <4 x i32>* %a, <2 x i32> <i32 5, i32 9>
|
|
ret i32 %w
|
|
}
|