mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-22 23:24:59 +00:00
Add "Args" optional argument to AbstractInterpreter factory methods, which
fills in a ToolArgs vector in the AbstractInterpreter if it is set. This ToolArgs vector is used to pass additional arguments to LLI and/or LLC. This is intended to address Bug 40. Also, make -debug-only=toolrunner work for the LLC and CBE AbstractInterpreters. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13356 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -80,14 +80,18 @@ public:
|
||||
/// complexity behind a simple interface.
|
||||
///
|
||||
struct AbstractInterpreter {
|
||||
static CBE* createCBE(const std::string &ProgramPath, std::string &Message);
|
||||
static LLC *createLLC(const std::string &ProgramPath, std::string &Message);
|
||||
static CBE *createCBE(const std::string &ProgramPath, std::string &Message,
|
||||
const std::vector<std::string> *Args = 0);
|
||||
static LLC *createLLC(const std::string &ProgramPath, std::string &Message,
|
||||
const std::vector<std::string> *Args = 0);
|
||||
|
||||
static AbstractInterpreter* createLLI(const std::string &ProgramPath,
|
||||
std::string &Message);
|
||||
std::string &Message,
|
||||
const std::vector<std::string> *Args=0);
|
||||
|
||||
static AbstractInterpreter* createJIT(const std::string &ProgramPath,
|
||||
std::string &Message);
|
||||
std::string &Message,
|
||||
const std::vector<std::string> *Args=0);
|
||||
|
||||
|
||||
virtual ~AbstractInterpreter() {}
|
||||
@@ -114,9 +118,14 @@ struct AbstractInterpreter {
|
||||
//
|
||||
class CBE : public AbstractInterpreter {
|
||||
std::string LLCPath; // The path to the `llc' executable
|
||||
std::vector<std::string> ToolArgs; // Extra args to pass to LLC
|
||||
GCC *gcc;
|
||||
public:
|
||||
CBE(const std::string &llcPath, GCC *Gcc) : LLCPath(llcPath), gcc(Gcc) { }
|
||||
CBE(const std::string &llcPath, GCC *Gcc,
|
||||
const std::vector<std::string> *Args) : LLCPath(llcPath), gcc(Gcc) {
|
||||
ToolArgs.clear ();
|
||||
if (Args) { ToolArgs.assign (Args->begin (), Args->end ()); }
|
||||
}
|
||||
~CBE() { delete gcc; }
|
||||
|
||||
/// compileProgram - Compile the specified program from bytecode to executable
|
||||
@@ -145,13 +154,16 @@ public:
|
||||
//
|
||||
class LLC : public AbstractInterpreter {
|
||||
std::string LLCPath; // The path to the LLC executable
|
||||
std::vector<std::string> ToolArgs; // Extra args to pass to LLC
|
||||
GCC *gcc;
|
||||
public:
|
||||
LLC(const std::string &llcPath, GCC *Gcc)
|
||||
: LLCPath(llcPath), gcc(Gcc) { }
|
||||
LLC(const std::string &llcPath, GCC *Gcc,
|
||||
const std::vector<std::string> *Args) : LLCPath(llcPath), gcc(Gcc) {
|
||||
ToolArgs.clear ();
|
||||
if (Args) { ToolArgs.assign (Args->begin (), Args->end ()); }
|
||||
}
|
||||
~LLC() { delete gcc; }
|
||||
|
||||
|
||||
/// compileProgram - Compile the specified program from bytecode to executable
|
||||
/// code. This does not produce any output, it is only used when debugging
|
||||
/// the code generator. If the code generator fails, an exception should be
|
||||
|
Reference in New Issue
Block a user