aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/R600/AMDGPUFrameLowering.cpp
diff options
context:
space:
mode:
authorTom Stellard <thomas.stellard@amd.com>2013-06-07 20:52:05 +0000
committerTom Stellard <thomas.stellard@amd.com>2013-06-07 20:52:05 +0000
commitd74583777fb44d86ff120d4f5fb2b00f815fb72b (patch)
tree9d536f6195d09fcc0f1b2c7733baf4d1559bae5c /llvm/lib/Target/R600/AMDGPUFrameLowering.cpp
parent637d97dd51049951445ea4d03b568abd11a5d95f (diff)
downloadllvm-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.cpp23
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;
}