mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-20 18:56:04 +00:00
Generalize the transform that boosts GEP indices to the size of a pointer to
also do it for vectors of pointers. llvm-svn: 167354
This commit is contained in:
parent
1bfa522bfe
commit
626552af21
@ -1055,7 +1055,7 @@ Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) {
|
||||
// by multiples of a zero size type with zero.
|
||||
if (TD) {
|
||||
bool MadeChange = false;
|
||||
Type *IntPtrTy = TD->getIntPtrType(GEP.getContext());
|
||||
Type *IntPtrTy = TD->getIntPtrType(GEP.getPointerOperandType());
|
||||
|
||||
gep_type_iterator GTI = gep_type_begin(GEP);
|
||||
for (User::op_iterator I = GEP.op_begin() + 1, E = GEP.op_end();
|
||||
@ -1074,7 +1074,7 @@ Instruction *InstCombiner::visitGetElementPtrInst(GetElementPtrInst &GEP) {
|
||||
}
|
||||
|
||||
Type *IndexTy = (*I)->getType();
|
||||
if (IndexTy != IntPtrTy && !IndexTy->isVectorTy()) {
|
||||
if (IndexTy != IntPtrTy) {
|
||||
// If we are using a wider index than needed for this platform, shrink
|
||||
// it to what we need. If narrower, sign-extend it to what we need.
|
||||
// This explicit cast can make subsequent optimizations more obvious.
|
||||
|
11
test/Transforms/InstCombine/vector_gep2.ll
Normal file
11
test/Transforms/InstCombine/vector_gep2.ll
Normal file
@ -0,0 +1,11 @@
|
||||
; RUN: opt < %s -instcombine -S | FileCheck %s
|
||||
|
||||
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
|
||||
target triple = "x86_64-unknown-linux-gnu"
|
||||
|
||||
define <2 x i8*> @testa(<2 x i8*> %a) {
|
||||
; CHECK: @testa
|
||||
%g = getelementptr <2 x i8*> %a, <2 x i32> <i32 0, i32 1>
|
||||
; CHECK: getelementptr <2 x i8*> %a, <2 x i64> <i64 0, i64 1>
|
||||
ret <2 x i8*> %g
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user