summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChad Rosier <mcrosier@codeaurora.org>2014-06-30 15:03:00 +0000
committerChad Rosier <mcrosier@codeaurora.org>2014-06-30 15:03:00 +0000
commit304fe3ff7134575fff5c919ae1a41fb0aef735ea (patch)
treea6915d82e2bf966913c4aa5cc0b1152cd9c7a196
parente6b8761ab992201020a61b755aa69b459c1eb6c9 (diff)
downloadbcm5719-llvm-304fe3ff7134575fff5c919ae1a41fb0aef735ea.tar.gz
bcm5719-llvm-304fe3ff7134575fff5c919ae1a41fb0aef735ea.zip
[AArch64] Unsized types don't specify an alignment.
PR20109 llvm-svn: 212045
-rw-r--r--llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp5
-rw-r--r--llvm/test/CodeGen/AArch64/funcptr_cast.ll13
2 files changed, 16 insertions, 2 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp b/llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
index 98609760a73..3f49fabfb58 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
@@ -593,8 +593,9 @@ bool AArch64DAGToDAGISel::SelectAddrModeIndexed(SDValue N, unsigned Size,
const GlobalValue *GV = GAN->getGlobal();
unsigned Alignment = GV->getAlignment();
const DataLayout *DL = TLI->getDataLayout();
- if (Alignment == 0 && !Subtarget->isTargetDarwin())
- Alignment = DL->getABITypeAlignment(GV->getType()->getElementType());
+ Type *Ty = GV->getType()->getElementType();
+ if (Alignment == 0 && Ty->isSized() && !Subtarget->isTargetDarwin())
+ Alignment = DL->getABITypeAlignment(Ty);
if (Alignment >= Size)
return true;
diff --git a/llvm/test/CodeGen/AArch64/funcptr_cast.ll b/llvm/test/CodeGen/AArch64/funcptr_cast.ll
new file mode 100644
index 00000000000..a00b7bcaf6a
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/funcptr_cast.ll
@@ -0,0 +1,13 @@
+; RUN: llc < %s -mtriple=aarch64-none-linux-gnu | FileCheck %s
+
+define i8 @test() {
+; CHECK-LABEL: @test
+; CHECK: adrp {{x[0-9]+}}, foo
+; CHECK: add {{x[0-9]+}}, {{x[0-9]+}}, :lo12:foo
+; CHECK: ldrb w0, [{{x[0-9]+}}]
+entry:
+ %0 = load i8* bitcast (void (...)* @foo to i8*), align 1
+ ret i8 %0
+}
+
+declare void @foo(...)
OpenPOWER on IntegriCloud