diff options
author | Tom Stellard <thomas.stellard@amd.com> | 2013-06-07 20:52:05 +0000 |
---|---|---|
committer | Tom Stellard <thomas.stellard@amd.com> | 2013-06-07 20:52:05 +0000 |
commit | d74583777fb44d86ff120d4f5fb2b00f815fb72b (patch) | |
tree | 9d536f6195d09fcc0f1b2c7733baf4d1559bae5c /llvm/lib/Target/R600/AMDGPUFrameLowering.cpp | |
parent | 637d97dd51049951445ea4d03b568abd11a5d95f (diff) | |
download | llvm-d74583777fb44d86ff120d4f5fb2b00f815fb72b.zip llvm-d74583777fb44d86ff120d4f5fb2b00f815fb72b.tar.gz llvm-d74583777fb44d86ff120d4f5fb2b00f815fb72b.tar.bz2 |
R600: Fix calculation of stack offset in AMDGPUFrameLowering
We weren't computing structure size correctly and we were relying on
the original alloca instruction to compute the offset, which isn't
always reliable.
Reviewed-by: Vincent Lejeune <vljn@ovi.com>
llvm-svn: 183568
Diffstat (limited to 'llvm/lib/Target/R600/AMDGPUFrameLowering.cpp')
-rw-r--r-- | llvm/lib/Target/R600/AMDGPUFrameLowering.cpp | 23 |
1 files changed, 2 insertions, 21 deletions
diff --git a/llvm/lib/Target/R600/AMDGPUFrameLowering.cpp b/llvm/lib/Target/R600/AMDGPUFrameLowering.cpp index 815d6f7..40f14d2 100644 --- a/llvm/lib/Target/R600/AMDGPUFrameLowering.cpp +++ b/llvm/lib/Target/R600/AMDGPUFrameLowering.cpp @@ -78,27 +78,8 @@ int AMDGPUFrameLowering::getFrameIndexOffset(const MachineFunction &MF, int UpperBound = FI == -1 ? MFI->getNumObjects() : FI; for (int i = MFI->getObjectIndexBegin(); i < UpperBound; ++i) { - const AllocaInst *Alloca = MFI->getObjectAllocation(i); - unsigned ArrayElements; - const Type *AllocaType = Alloca->getAllocatedType(); - const Type *ElementType; - - if (AllocaType->isArrayTy()) { - ArrayElements = AllocaType->getArrayNumElements(); - ElementType = AllocaType->getArrayElementType(); - } else { - ArrayElements = 1; - ElementType = AllocaType; - } - - unsigned VectorElements; - if (ElementType->isVectorTy()) { - VectorElements = ElementType->getVectorNumElements(); - } else { - VectorElements = 1; - } - - Offset += (VectorElements / getStackWidth(MF)) * ArrayElements; + unsigned Size = MFI->getObjectSize(i); + Offset += (Size / (getStackWidth(MF) * 4)); } return Offset; } |