llvm-mc: Remove --show-fixups and always show as part of --show-encoding.

Also, fix a silly memory leak.

llvm-svn: 95752
This commit is contained in:
Daniel Dunbar 2010-02-10 01:41:14 +00:00
parent 0f058c83a7
commit 75c9a4eeae
3 changed files with 8 additions and 27 deletions

View File

@ -278,15 +278,12 @@ namespace llvm {
/// ///
/// \param ShowInst - Whether to show the MCInst representation inline with /// \param ShowInst - Whether to show the MCInst representation inline with
/// the assembly. /// the assembly.
///
/// \param ShowFixups - Whether to show the fixups in an encoded instruction.
MCStreamer *createAsmStreamer(MCContext &Ctx, formatted_raw_ostream &OS, MCStreamer *createAsmStreamer(MCContext &Ctx, formatted_raw_ostream &OS,
const MCAsmInfo &MAI, bool isLittleEndian, const MCAsmInfo &MAI, bool isLittleEndian,
bool isVerboseAsm, bool isVerboseAsm,
MCInstPrinter *InstPrint = 0, MCInstPrinter *InstPrint = 0,
MCCodeEmitter *CE = 0, MCCodeEmitter *CE = 0,
bool ShowInst = false, bool ShowInst = false);
bool ShowFixups = false);
// FIXME: These two may end up getting rolled into a single // FIXME: These two may end up getting rolled into a single
// createObjectStreamer interface, which implements the assembler backend, and // createObjectStreamer interface, which implements the assembler backend, and

View File

@ -37,18 +37,17 @@ class MCAsmStreamer : public MCStreamer {
unsigned IsLittleEndian : 1; unsigned IsLittleEndian : 1;
unsigned IsVerboseAsm : 1; unsigned IsVerboseAsm : 1;
unsigned ShowFixups : 1;
unsigned ShowInst : 1; unsigned ShowInst : 1;
public: public:
MCAsmStreamer(MCContext &Context, formatted_raw_ostream &os, MCAsmStreamer(MCContext &Context, formatted_raw_ostream &os,
const MCAsmInfo &mai, const MCAsmInfo &mai,
bool isLittleEndian, bool isVerboseAsm, MCInstPrinter *printer, bool isLittleEndian, bool isVerboseAsm, MCInstPrinter *printer,
MCCodeEmitter *emitter, bool showInst, bool showFixups) MCCodeEmitter *emitter, bool showInst)
: MCStreamer(Context), OS(os), MAI(mai), InstPrinter(printer), : MCStreamer(Context), OS(os), MAI(mai), InstPrinter(printer),
Emitter(emitter), CommentStream(CommentToEmit), Emitter(emitter), CommentStream(CommentToEmit),
IsLittleEndian(isLittleEndian), IsVerboseAsm(isVerboseAsm), IsLittleEndian(isLittleEndian), IsVerboseAsm(isVerboseAsm),
ShowFixups(showFixups), ShowInst(showInst) { ShowInst(showInst) {
if (InstPrinter && IsVerboseAsm) if (InstPrinter && IsVerboseAsm)
InstPrinter->setCommentStream(CommentStream); InstPrinter->setCommentStream(CommentStream);
} }
@ -543,22 +542,11 @@ void MCAsmStreamer::AddEncodingComment(const MCInst &Inst) {
Emitter->EncodeInstruction(Inst, VecOS, Fixups); Emitter->EncodeInstruction(Inst, VecOS, Fixups);
VecOS.flush(); VecOS.flush();
// If we aren't showing fixups, just show the bytes.
if (!ShowFixups) {
OS << "encoding: [";
for (unsigned i = 0, e = Code.size(); i != e; ++i) {
if (i)
OS << ',';
OS << format("0x%02x", uint8_t(Code[i]));
}
OS << "]\n";
return;
}
// If we are showing fixups, create symbolic markers in the encoded // If we are showing fixups, create symbolic markers in the encoded
// representation. We do this by making a per-bit map to the fixup item index, // representation. We do this by making a per-bit map to the fixup item index,
// then trying to display it as nicely as possible. // then trying to display it as nicely as possible.
uint8_t *FixupMap = new uint8_t[Code.size() * 8]; SmallVector<uint8_t, 64> FixupMap;
FixupMap.resize(Code.size() * 8);
for (unsigned i = 0, e = Code.size() * 8; i != e; ++i) for (unsigned i = 0, e = Code.size() * 8; i != e; ++i)
FixupMap[i] = 0; FixupMap[i] = 0;
@ -652,8 +640,7 @@ MCStreamer *llvm::createAsmStreamer(MCContext &Context,
formatted_raw_ostream &OS, formatted_raw_ostream &OS,
const MCAsmInfo &MAI, bool isLittleEndian, const MCAsmInfo &MAI, bool isLittleEndian,
bool isVerboseAsm, MCInstPrinter *IP, bool isVerboseAsm, MCInstPrinter *IP,
MCCodeEmitter *CE, bool ShowInst, MCCodeEmitter *CE, bool ShowInst) {
bool ShowFixups) {
return new MCAsmStreamer(Context, OS, MAI, isLittleEndian, isVerboseAsm, return new MCAsmStreamer(Context, OS, MAI, isLittleEndian, isVerboseAsm,
IP, CE, ShowInst, ShowFixups); IP, CE, ShowInst);
} }

View File

@ -46,9 +46,6 @@ OutputFilename("o", cl::desc("Output filename"),
static cl::opt<bool> static cl::opt<bool>
ShowEncoding("show-encoding", cl::desc("Show instruction encodings")); ShowEncoding("show-encoding", cl::desc("Show instruction encodings"));
static cl::opt<bool>
ShowFixups("show-fixups", cl::desc("Show fixups inside encodings"));
static cl::opt<bool> static cl::opt<bool>
ShowInst("show-inst", cl::desc("Show internal instruction representation")); ShowInst("show-inst", cl::desc("Show internal instruction representation"));
@ -273,7 +270,7 @@ static int AssembleInput(const char *ProgName) {
Str.reset(createAsmStreamer(Ctx, *Out, *MAI, Str.reset(createAsmStreamer(Ctx, *Out, *MAI,
TM->getTargetData()->isLittleEndian(), TM->getTargetData()->isLittleEndian(),
/*asmverbose*/true, IP.get(), CE.get(), /*asmverbose*/true, IP.get(), CE.get(),
ShowInst, ShowFixups)); ShowInst));
} else { } else {
assert(FileType == OFT_ObjectFile && "Invalid file type!"); assert(FileType == OFT_ObjectFile && "Invalid file type!");
CE.reset(TheTarget->createCodeEmitter(*TM)); CE.reset(TheTarget->createCodeEmitter(*TM));