mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-18 10:31:57 +00:00
3ed469ccd7
Turn on -Wunused and -Wno-unused-parameter. Clean up most of the resulting fall out by removing unused variables. Remaining warnings have to do with unused functions (I didn't want to delete code without review) and unused variables in generated code. Maintainers should clean up the remaining issues when they see them. All changes pass DejaGnu tests and Olden. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31380 91177308-0d34-0410-b5e6-96231b3b80d8
93 lines
3.4 KiB
C++
93 lines
3.4 KiB
C++
//===-- llvm-bcanalyzer.cpp - Byte Code Analyzer --------------------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file was developed by Reid Spencer and is distributed under the
|
|
// University of Illinois Open Source License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This tool may be invoked in the following manner:
|
|
// llvm-bcanalyzer [options] - Read LLVM bytecode from stdin
|
|
// llvm-bcanalyzer [options] x.bc - Read LLVM bytecode from the x.bc file
|
|
//
|
|
// Options:
|
|
// --help - Output information about command line switches
|
|
// --nodetails - Don't print out detailed informaton about individual
|
|
// blocks and functions
|
|
// --dump - Dump low-level bytecode structure in readable format
|
|
//
|
|
// This tool provides analytical information about a bytecode file. It is
|
|
// intended as an aid to developers of bytecode reading and writing software. It
|
|
// produces on std::out a summary of the bytecode file that shows various
|
|
// statistics about the contents of the file. By default this information is
|
|
// detailed and contains information about individual bytecode blocks and the
|
|
// functions in the module. To avoid this more detailed output, use the
|
|
// -nodetails option to limit the output to just module level information.
|
|
// The tool is also able to print a bytecode file in a straight forward text
|
|
// format that shows the containment and relationships of the information in
|
|
// the bytecode file (-dump option).
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/Analysis/Verifier.h"
|
|
#include "llvm/Bytecode/Analyzer.h"
|
|
#include "llvm/Support/CommandLine.h"
|
|
#include "llvm/System/Signals.h"
|
|
#include <fstream>
|
|
#include <iostream>
|
|
|
|
using namespace llvm;
|
|
|
|
static cl::opt<std::string>
|
|
InputFilename(cl::Positional, cl::desc("<input bytecode>"), cl::init("-"));
|
|
|
|
static cl::opt<std::string>
|
|
OutputFilename("-o", cl::init("-"), cl::desc("<output file>"));
|
|
|
|
static cl::opt<bool> NoDetails ("nodetails", cl::desc("Skip detailed output"));
|
|
static cl::opt<bool> Dump ("dump", cl::desc("Dump low level bytecode trace"));
|
|
static cl::opt<bool> Verify ("verify", cl::desc("Progressively verify module"));
|
|
|
|
int
|
|
main(int argc, char **argv) {
|
|
try {
|
|
cl::ParseCommandLineOptions(argc, argv,
|
|
" llvm-bcanalyzer Analysis of ByteCode Dumper\n");
|
|
|
|
sys::PrintStackTraceOnErrorSignal();
|
|
|
|
std::ostream* Out = &std::cout; // Default to printing to stdout...
|
|
std::string ErrorMessage;
|
|
BytecodeAnalysis bca;
|
|
|
|
/// Determine what to generate
|
|
bca.detailedResults = !NoDetails;
|
|
bca.progressiveVerify = Verify;
|
|
|
|
/// Analyze the bytecode file
|
|
Module* M = AnalyzeBytecodeFile(InputFilename, bca, &ErrorMessage, (Dump?Out:0));
|
|
|
|
// All that bcanalyzer does is write the gathered statistics to the output
|
|
PrintBytecodeAnalysis(bca,*Out);
|
|
|
|
if ( M && Verify ) {
|
|
std::string verificationMsg;
|
|
if (verifyModule(*M, ReturnStatusAction, &verificationMsg))
|
|
std::cerr << "Final Verification Message: " << verificationMsg << "\n";
|
|
}
|
|
|
|
if (Out != &std::cout) {
|
|
((std::ofstream*)Out)->close();
|
|
delete Out;
|
|
}
|
|
return 0;
|
|
} catch (const std::string& msg) {
|
|
std::cerr << argv[0] << ": " << msg << "\n";
|
|
} catch (...) {
|
|
std::cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
// vim: sw=2
|