Index: lib/CodeGen/SelectionDAG/SelectionDAG.cpp =================================================================== --- lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -1315,7 +1315,9 @@ 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); Index: test/CodeGen/ARM/constantpool-align.ll =================================================================== --- /dev/null +++ test/CodeGen/ARM/constantpool-align.ll @@ -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> , <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> , <4 x i32>* %p, align 4 + ret void +}