if (FrameIndices.find(&AI) != FrameIndices.end())
return FrameIndices[&AI];
- unsigned ElementSize = DL->getTypeStoreSize(AI.getAllocatedType());
+ unsigned ElementSize = DL->getTypeAllocSize(AI.getAllocatedType());
unsigned Size =
ElementSize * cast<ConstantInt>(AI.getArraySize())->getZExtValue();
--- /dev/null
+; RUN: llc -global-isel -stop-after irtranslator -mtriple aarch64-apple-ios %s -o - | FileCheck %s
+
+; We use to incorrectly use the store size instead of the alloc size when
+; creating the stack slot for allocas. This shows on aarch64 only when
+; we allocated weirdly sized type. For instance, in that case, we used
+; to allocate a slot of size 24-bit (19 rounded up to the next byte),
+; whereas we really want to use a full 32-bit slot for this type.
+; CHECK-LABEL: foo
+; Check that the stack slot is 4-byte wide instead of the previously
+; wrongly 3-byte sized slot.
+; CHECK: stack:
+; CHECK-NEXT: - { id: 0, name: stack_slot, type: default, offset: 0, size: 4, alignment: 4
+define void @foo() {
+ %stack_slot = alloca i19
+ call void @bar(i19* %stack_slot)
+ ret void
+}
+
+declare void @bar(i19* %a)