add Align field, and use when generating function alignment
authorDale Johannesen <dalej@apple.com>
Mon, 23 Apr 2007 20:07:25 +0000 (20:07 +0000)
committerDale Johannesen <dalej@apple.com>
Mon, 23 Apr 2007 20:07:25 +0000 (20:07 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36371 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMAsmPrinter.cpp
lib/Target/ARM/ARMMachineFunctionInfo.h

index 625dd9d88565691bc69758176901ae9c7235ee86..6822e632824a1c383df3e5affbdfa18adb39465d 100644 (file)
@@ -211,7 +211,7 @@ bool ARMAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
       O << Directive << CurrentFnName << "\n";
 
   if (AFI->isThumbFunction()) {
-    EmitAlignment(1, F);
+    EmitAlignment(AFI->getAlign(), F);
     O << "\t.code\t16\n";
     O << "\t.thumb_func";
     if (Subtarget->isTargetDarwin())
index f943cb75657d396a7741182a208ede179a99208a..665c5e39292410e11a4986b12061a211a9aa2451 100644 (file)
@@ -27,9 +27,14 @@ namespace llvm {
 class ARMFunctionInfo : public MachineFunctionInfo {
 
   /// isThumb - True if this function is compiled under Thumb mode.
-  ///
+  /// Used to initialized Align, so must precede it.
   bool isThumb;
 
+  /// Align - required alignment.  ARM functions and Thumb functions with
+  /// constant pools require 4-byte alignment; other Thumb functions
+  /// require only 2-byte alignment.
+  unsigned Align;
+
   /// VarArgsRegSaveSize - Size of the register save area for vararg functions.
   ///
   unsigned VarArgsRegSaveSize;
@@ -84,7 +89,8 @@ class ARMFunctionInfo : public MachineFunctionInfo {
 
 public:
   ARMFunctionInfo() :
-    isThumb(false),
+    isThumb(false), 
+    Align(2U),
     VarArgsRegSaveSize(0), HasStackFrame(false),
     LRSpilledForFarJump(false), R3IsLiveIn(false),
     FramePtrSpillOffset(0), GPRCS1Offset(0), GPRCS2Offset(0), DPRCSOffset(0),
@@ -94,6 +100,7 @@ public:
 
   ARMFunctionInfo(MachineFunction &MF) :
     isThumb(MF.getTarget().getSubtarget<ARMSubtarget>().isThumb()),
+    Align(isThumb ? 1U : 2U),
     VarArgsRegSaveSize(0), HasStackFrame(false),
     LRSpilledForFarJump(false), R3IsLiveIn(false),
     FramePtrSpillOffset(0), GPRCS1Offset(0), GPRCS2Offset(0), DPRCSOffset(0),
@@ -104,6 +111,9 @@ public:
 
   bool isThumbFunction() const { return isThumb; }
 
+  unsigned getAlign() const { return Align; }
+  void setAlign(unsigned a) { Align = a; }
+
   unsigned getVarArgsRegSaveSize() const { return VarArgsRegSaveSize; }
   void setVarArgsRegSaveSize(unsigned s) { VarArgsRegSaveSize = s; }