From ea3cb40fab5dc84caa0c6c6bcb650261b4b6e724 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 20 Jan 2010 07:33:29 +0000 Subject: [PATCH] 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 --- include/llvm/CodeGen/AsmPrinter.h | 4 -- lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 63 ++++++--------------- lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp | 7 ++- 3 files changed, 24 insertions(+), 50 deletions(-) diff --git a/include/llvm/CodeGen/AsmPrinter.h b/include/llvm/CodeGen/AsmPrinter.h index b9ec5a700d1..349d4dffddf 100644 --- a/include/llvm/CodeGen/AsmPrinter.h +++ b/include/llvm/CodeGen/AsmPrinter.h @@ -413,10 +413,6 @@ namespace llvm { const MachineBasicBlock *MBB, unsigned uid) const; - /// printDataDirective - This method prints the asm directive for the - /// specified type. - void printDataDirective(const Type *type, unsigned AddrSpace = 0); - /// printVisibility - This prints visibility information about symbol, if /// this is suported by the target. void printVisibility(const MCSymbol *Sym, unsigned Visibility) const; diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 660955a5f44..bb786df9e1a 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(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(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) { diff --git a/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp b/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp index bacb13489a9..855b5c530aa 100644 --- a/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp +++ b/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp @@ -170,7 +170,12 @@ namespace { /// EmitMachineConstantPoolValue - Print a machine constantpool value to /// the .s file. virtual void EmitMachineConstantPoolValue(MachineConstantPoolValue *MCPV) { - printDataDirective(MCPV->getType()); + switch (TM.getTargetData()->getTypeAllocSize(MCPV->getType())) { + case 1: O << MAI->getData8bitsDirective(0); break; + case 2: O << MAI->getData16bitsDirective(0); break; + case 4: O << MAI->getData32bitsDirective(0); break; + default: assert(0 && "Unknown CPV size"); + } ARMConstantPoolValue *ACPV = static_cast(MCPV); SmallString<128> TmpNameStr;