From 4b747bb6a08cd9a190ea8b99a7480efb4ee4a7fe Mon Sep 17 00:00:00 2001 From: Evan Cheng Date: Wed, 25 Jul 2007 23:35:07 +0000 Subject: [PATCH] EmitAlignment() also emits optional fill value. llvm-svn: 40500 --- include/llvm/CodeGen/AsmPrinter.h | 7 +++++-- lib/CodeGen/AsmPrinter.cpp | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/include/llvm/CodeGen/AsmPrinter.h b/include/llvm/CodeGen/AsmPrinter.h index 954b9bcee1f..b848276416f 100644 --- a/include/llvm/CodeGen/AsmPrinter.h +++ b/include/llvm/CodeGen/AsmPrinter.h @@ -251,7 +251,9 @@ namespace llvm { /// an explicit alignment requested, it will unconditionally override the /// alignment request. However, if ForcedAlignBits is specified, this value /// has final say: the ultimate alignment will be the max of ForcedAlignBits - /// and the alignment computed with NumBits and the global. + /// and the alignment computed with NumBits and the global. If UseFillExpr + /// is true, it also emits an optional second value FillValue which the + /// assembler uses to fill gaps to match alignment. /// /// The algorithm is: /// Align = NumBits; @@ -259,7 +261,8 @@ namespace llvm { /// Align = std::max(Align, ForcedAlignBits); /// void EmitAlignment(unsigned NumBits, const GlobalValue *GV = 0, - unsigned ForcedAlignBits = 0) const; + unsigned ForcedAlignBits = 0, bool UseFillExpr = false, + unsigned FillValue = 0) const; protected: /// EmitZeros - Emit a block of zeros. diff --git a/lib/CodeGen/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter.cpp index 586472c38ef..7e07d848008 100644 --- a/lib/CodeGen/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter.cpp @@ -621,14 +621,17 @@ void AsmPrinter::EmitString(const std::string &String) const { // Align = std::max(Align, ForcedAlignBits); // void AsmPrinter::EmitAlignment(unsigned NumBits, const GlobalValue *GV, - unsigned ForcedAlignBits) const { + unsigned ForcedAlignBits, bool UseFillExpr, + unsigned FillValue) const { if (GV && GV->getAlignment()) NumBits = Log2_32(GV->getAlignment()); NumBits = std::max(NumBits, ForcedAlignBits); if (NumBits == 0) return; // No need to emit alignment. if (TAI->getAlignmentIsInBytes()) NumBits = 1 << NumBits; - O << TAI->getAlignDirective() << NumBits << "\n"; + O << TAI->getAlignDirective() << NumBits; + if (UseFillExpr) O << ",0x" << std::hex << FillValue << std::dec; + O << "\n"; }