mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 12:43:36 +01:00
[SDAG] Use ABI type alignment for constant pools when optimizing for size
SelectionDAG::getConstantPool will automatically determine an appropriate alignment if one is not specified. It does this by querying the type's preferred alignment. This can end up creating quite a lot of padding when the preferred alignment for vectors is 128. In optimize-for-size mode, it makes sense to instead query the ABI type alignment which is often smaller and causes less padding. llvm-svn: 284381
This commit is contained in:
parent
f39706c65a
commit
c6be02fbf0
@ -1315,7 +1315,9 @@ SDValue SelectionDAG::getConstantPool(const Constant *C, EVT VT,
|
||||
assert((TargetFlags == 0 || isTarget) &&
|
||||
"Cannot set target flags on target-independent globals");
|
||||
if (Alignment == 0)
|
||||
Alignment = getDataLayout().getPrefTypeAlignment(C->getType());
|
||||
Alignment = MF->getFunction()->optForSize()
|
||||
? getDataLayout().getABITypeAlignment(C->getType())
|
||||
: getDataLayout().getPrefTypeAlignment(C->getType());
|
||||
unsigned Opc = isTarget ? ISD::TargetConstantPool : ISD::ConstantPool;
|
||||
FoldingSetNodeID ID;
|
||||
AddNodeIDNode(ID, Opc, getVTList(VT), None);
|
||||
|
19
test/CodeGen/ARM/constantpool-align.ll
Normal file
19
test/CodeGen/ARM/constantpool-align.ll
Normal file
@ -0,0 +1,19 @@
|
||||
; RUN: llc < %s | FileCheck %s
|
||||
target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
|
||||
target triple = "thumbv7-arm-none-eabi"
|
||||
|
||||
; CHECK-LABEL: f:
|
||||
; CHECK: vld1.64 {{.*}}, [r1:128]
|
||||
; CHECK: .p2align 4
|
||||
define void @f(<4 x i32>* %p) {
|
||||
store <4 x i32> <i32 -1, i32 0, i32 0, i32 -1>, <4 x i32>* %p, align 4
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK-LABEL: f_optsize:
|
||||
; CHECK: vld1.64 {{.*}}, [r1]
|
||||
; CHECK: .p2align 3
|
||||
define void @f_optsize(<4 x i32>* %p) optsize {
|
||||
store <4 x i32> <i32 -1, i32 0, i32 0, i32 -1>, <4 x i32>* %p, align 4
|
||||
ret void
|
||||
}
|
Loading…
Reference in New Issue
Block a user