mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-04-02 15:51:54 +00:00
ScalarEvolution: Derive element size from the type of the loaded element
Before, we where looking at the size of the pointer type that specifies the location from which to load the element. This did not make any sense at all. This change fixes a bug in the delinearization where we failed to delinerize certain load instructions. llvm-svn: 210435
This commit is contained in:
parent
fd04eace77
commit
e914a50dc9
@ -7365,7 +7365,7 @@ const SCEV *ScalarEvolution::getElementSize(Instruction *Inst) {
|
||||
if (StoreInst *Store = dyn_cast<StoreInst>(Inst))
|
||||
Ty = Store->getValueOperand()->getType();
|
||||
else if (LoadInst *Load = dyn_cast<LoadInst>(Inst))
|
||||
Ty = Load->getPointerOperand()->getType();
|
||||
Ty = Load->getType();
|
||||
else
|
||||
return nullptr;
|
||||
|
||||
|
@ -8,6 +8,15 @@
|
||||
; A[i][j] = 1.0;
|
||||
; }
|
||||
|
||||
; Inst: %val = load double* %arrayidx
|
||||
; In Loop with Header: for.j
|
||||
; AddRec: {{0,+,(%m * sizeof(double))}<%for.i>,+,sizeof(double)}<%for.j>
|
||||
; Base offset: %A
|
||||
; ArrayDecl[UnknownSize][%m] with elements of sizeof(double) bytes.
|
||||
; ArrayRef[{0,+,1}<nuw><nsw><%for.i>][{0,+,1}<nuw><nsw><%for.j>]
|
||||
|
||||
; Inst: store double %val, double* %arrayidx
|
||||
; In Loop with Header: for.j
|
||||
; AddRec: {{%A,+,(8 * %m)}<%for.i>,+,8}<%for.j>
|
||||
; CHECK: Base offset: %A
|
||||
; CHECK: ArrayDecl[UnknownSize][%m] with elements of sizeof(double) bytes.
|
||||
@ -26,7 +35,8 @@ for.j:
|
||||
%j = phi i64 [ 0, %for.i ], [ %j.inc, %for.j ]
|
||||
%vlaarrayidx.sum = add i64 %j, %tmp
|
||||
%arrayidx = getelementptr inbounds double* %A, i64 %vlaarrayidx.sum
|
||||
store double 1.0, double* %arrayidx
|
||||
%val = load double* %arrayidx
|
||||
store double %val, double* %arrayidx
|
||||
%j.inc = add nsw i64 %j, 1
|
||||
%j.exitcond = icmp eq i64 %j.inc, %m
|
||||
br i1 %j.exitcond, label %for.i.inc, label %for.j
|
||||
|
Loading…
x
Reference in New Issue
Block a user