diff options
| author | Chris Lattner <sabre@nondot.org> | 2010-01-20 07:33:29 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2010-01-20 07:33:29 +0000 |
| commit | ea3cb40fab5dc84caa0c6c6bcb650261b4b6e724 (patch) | |
| tree | 1160e346b6a049b2bef8ca0870c0f4dd62c3e9fd /lib/CodeGen | |
| parent | 213168ba469703a186d060281e587d828878aa75 (diff) | |
inline and radically simplify printDataDirective. It will eventually
go completely away.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93994 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
| -rw-r--r-- | lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 63 |
1 files changed, 18 insertions, 45 deletions
diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 660955a5f4..bb786df9e1 100644 --- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -1248,8 +1248,24 @@ void AsmPrinter::EmitGlobalConstant(const Constant *CV, unsigned AddrSpace) { if (const ConstantVector *V = dyn_cast<ConstantVector>(CV)) return EmitGlobalConstantVector(V, AddrSpace, *this); - // ConstantExpr case. - printDataDirective(CV->getType(), AddrSpace); + // Otherwise, it must be a ConstantExpr. Emit the data directive, then emit + // the expression value. + switch (TM.getTargetData()->getTypeAllocSize(CV->getType())) { + case 0: return; + case 1: O << MAI->getData8bitsDirective(AddrSpace); break; + case 2: O << MAI->getData16bitsDirective(AddrSpace); break; + case 4: O << MAI->getData32bitsDirective(AddrSpace); break; + case 8: + if (const char *Dir = MAI->getData64bitsDirective(AddrSpace)) { + O << Dir; + break; + } + // FALL THROUGH. + default: + llvm_unreachable("Target cannot handle given data directive width!"); + return; + } + EmitConstantValueOnly(CV); O << '\n'; } @@ -1700,49 +1716,6 @@ void AsmPrinter::printPICJumpTableSetLabel(unsigned uid, unsigned uid2, << '_' << uid << '_' << uid2 << '\n'; } -/// printDataDirective - This method prints the asm directive for the -/// specified type. -void AsmPrinter::printDataDirective(const Type *type, unsigned AddrSpace) { - const TargetData *TD = TM.getTargetData(); - switch (type->getTypeID()) { - case Type::FloatTyID: case Type::DoubleTyID: - case Type::X86_FP80TyID: case Type::FP128TyID: case Type::PPC_FP128TyID: - assert(0 && "Should have already output floating point constant."); - default: - assert(0 && "Can't handle printing this type of thing"); - case Type::IntegerTyID: { - unsigned BitWidth = cast<IntegerType>(type)->getBitWidth(); - if (BitWidth <= 8) - O << MAI->getData8bitsDirective(AddrSpace); - else if (BitWidth <= 16) - O << MAI->getData16bitsDirective(AddrSpace); - else if (BitWidth <= 32) - O << MAI->getData32bitsDirective(AddrSpace); - else if (BitWidth <= 64) { - assert(MAI->getData64bitsDirective(AddrSpace) && - "Target cannot handle 64-bit constant exprs!"); - O << MAI->getData64bitsDirective(AddrSpace); - } else { - llvm_unreachable("Target cannot handle given data directive width!"); - } - break; - } - case Type::PointerTyID: - if (TD->getPointerSize() == 8) { - assert(MAI->getData64bitsDirective(AddrSpace) && - "Target cannot handle 64-bit pointer exprs!"); - O << MAI->getData64bitsDirective(AddrSpace); - } else if (TD->getPointerSize() == 2) { - O << MAI->getData16bitsDirective(AddrSpace); - } else if (TD->getPointerSize() == 1) { - O << MAI->getData8bitsDirective(AddrSpace); - } else { - O << MAI->getData32bitsDirective(AddrSpace); - } - break; - } -} - void AsmPrinter::printVisibility(const MCSymbol *Sym, unsigned Visibility) const { if (Visibility == GlobalValue::HiddenVisibility) { |
