mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-04 10:04:33 +00:00
[AArch64] Unsized types don't specify an alignment.
PR20109 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212045 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e7dfa85e85
commit
99f2d6fcc2
@ -593,8 +593,9 @@ bool AArch64DAGToDAGISel::SelectAddrModeIndexed(SDValue N, unsigned Size,
|
|||||||
const GlobalValue *GV = GAN->getGlobal();
|
const GlobalValue *GV = GAN->getGlobal();
|
||||||
unsigned Alignment = GV->getAlignment();
|
unsigned Alignment = GV->getAlignment();
|
||||||
const DataLayout *DL = TLI->getDataLayout();
|
const DataLayout *DL = TLI->getDataLayout();
|
||||||
if (Alignment == 0 && !Subtarget->isTargetDarwin())
|
Type *Ty = GV->getType()->getElementType();
|
||||||
Alignment = DL->getABITypeAlignment(GV->getType()->getElementType());
|
if (Alignment == 0 && Ty->isSized() && !Subtarget->isTargetDarwin())
|
||||||
|
Alignment = DL->getABITypeAlignment(Ty);
|
||||||
|
|
||||||
if (Alignment >= Size)
|
if (Alignment >= Size)
|
||||||
return true;
|
return true;
|
||||||
|
13
test/CodeGen/AArch64/funcptr_cast.ll
Normal file
13
test/CodeGen/AArch64/funcptr_cast.ll
Normal file
@ -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(...)
|
Loading…
Reference in New Issue
Block a user