diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2006-07-27 11:38:51 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2006-07-27 11:38:51 +0000 |
commit | b01c4bbb4573e0007444e218b683840e4519e0c8 (patch) | |
tree | b2d6aff6e711df973e76b15c6e2219bd9537657a | |
parent | 7c16d776cb827922dd0f8f0a88c5b65a90810c0b (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.cpp | 29 |
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 } |