aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2006-07-27 11:38:51 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2006-07-27 11:38:51 +0000
commitb01c4bbb4573e0007444e218b683840e4519e0c8 (patch)
treeb2d6aff6e711df973e76b15c6e2219bd9537657a
parent7c16d776cb827922dd0f8f0a88c5b65a90810c0b (diff)
emit global constants
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29344 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/ARM/ARMAsmPrinter.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/Target/ARM/ARMAsmPrinter.cpp b/lib/Target/ARM/ARMAsmPrinter.cpp
index efb20d150e..a78e54d0e9 100644
--- a/lib/Target/ARM/ARMAsmPrinter.cpp
+++ b/lib/Target/ARM/ARMAsmPrinter.cpp
@@ -23,6 +23,7 @@
#include "llvm/CodeGen/MachineFunctionPass.h"
#include "llvm/CodeGen/MachineConstantPool.h"
#include "llvm/CodeGen/MachineInstr.h"
+#include "llvm/Target/TargetData.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Support/Mangler.h"
#include "llvm/ADT/Statistic.h"
@@ -190,6 +191,34 @@ bool ARMAsmPrinter::doInitialization(Module &M) {
}
bool ARMAsmPrinter::doFinalization(Module &M) {
+ const TargetData *TD = TM.getTargetData();
+
+ for (Module::const_global_iterator I = M.global_begin(), E = M.global_end();
+ I != E; ++I) {
+ if (!I->hasInitializer()) // External global require no code
+ continue;
+
+ if (EmitSpecialLLVMGlobal(I))
+ continue;
+
+ O << "\n\n";
+ std::string name = Mang->getValueName(I);
+ Constant *C = I->getInitializer();
+ unsigned Size = TD->getTypeSize(C->getType());
+ unsigned Align = TD->getTypeAlignment(C->getType());
+
+ assert (I->getLinkage() == GlobalValue::ExternalLinkage);
+ O << "\t.globl " << name << "\n";
+
+ assert (!C->isNullValue());
+ SwitchToDataSection(".data", I);
+
+ EmitAlignment(Align, I);
+ O << "\t.type " << name << ", %object\n";
+ O << "\t.size " << name << ", " << Size << "\n";
+ O << name << ":\n";
+ EmitGlobalConstant(C);
+ }
AsmPrinter::doFinalization(M);
return false; // success
}