[llvm] r284381 - [SDAG] Use ABI type alignment for constant pools when optimizing for size

James Molloy via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 17 05:54:07 PDT 2016


Author: jamesm
Date: Mon Oct 17 07:54:07 2016
New Revision: 284381

URL: http://llvm.org/viewvc/llvm-project?rev=284381&view=rev
Log:
[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.

Added:
    llvm/trunk/test/CodeGen/ARM/constantpool-align.ll
Modified:
    llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp

Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp?rev=284381&r1=284380&r2=284381&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Mon Oct 17 07:54:07 2016
@@ -1315,7 +1315,9 @@ SDValue SelectionDAG::getConstantPool(co
   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);

Added: llvm/trunk/test/CodeGen/ARM/constantpool-align.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/constantpool-align.ll?rev=284381&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/constantpool-align.ll (added)
+++ llvm/trunk/test/CodeGen/ARM/constantpool-align.ll Mon Oct 17 07:54:07 2016
@@ -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 
+}




More information about the llvm-commits mailing list