blob: fb5c1fc9456845ae25ed49d11e371a7048c714f3 [file] [log] [blame]
Chris Lattner2cf137b2001-09-07 22:20:50 +00001//===------------------------------------------------------------------------===
2// LLVM 'LLC' UTILITY
3//
4// This is the llc compiler driver.
5//
6//===------------------------------------------------------------------------===
Vikram S. Adve2d94a342001-07-21 12:42:29 +00007
Vikram S. Adve2d94a342001-07-21 12:42:29 +00008#include "llvm/Bytecode/Reader.h"
Vikram S. Adve799aed02001-08-28 23:23:14 +00009#include "llvm/Optimizations/Normalize.h"
Chris Lattner9c0f8f22001-07-22 04:40:02 +000010#include "llvm/CodeGen/Sparc.h"
Chris Lattnerf8464e42001-09-14 04:32:55 +000011#include "llvm/CodeGen/TargetMachine.h"
Chris Lattnere2472bb2001-07-23 17:46:59 +000012#include "llvm/Support/CommandLine.h"
Chris Lattnered226062001-09-07 21:26:31 +000013#include "llvm/Module.h"
14#include "llvm/Method.h"
Chris Lattner0af24642001-07-23 02:35:57 +000015
Chris Lattnerab0cc402001-07-23 19:27:24 +000016cl::String InputFilename ("", "Input filename", cl::NoFlags, "-");
Chris Lattner0af24642001-07-23 02:35:57 +000017cl::String OutputFilename("o", "Output filename", cl::NoFlags, "");
18
Chris Lattnered226062001-09-07 21:26:31 +000019static void NormalizeMethod(Method* method) {
Vikram S. Adve799aed02001-08-28 23:23:14 +000020 NormalizePhiConstantArgs(method);
21}
22
23
Chris Lattnered226062001-09-07 21:26:31 +000024static bool CompileModule(Module *M, TargetMachine &Target) {
25 for (Module::const_iterator MI = M->begin(), ME = M->end(); MI != ME; ++MI) {
26 Method *Meth = *MI;
Chris Lattner9c0f8f22001-07-22 04:40:02 +000027
Chris Lattnered226062001-09-07 21:26:31 +000028 NormalizeMethod(Meth);
Vikram S. Adve799aed02001-08-28 23:23:14 +000029
Chris Lattner0a823a02001-09-14 03:37:52 +000030 if (Target.compileMethod(Meth)) return true;
Chris Lattnered226062001-09-07 21:26:31 +000031 }
Chris Lattner9c0f8f22001-07-22 04:40:02 +000032
Chris Lattnered226062001-09-07 21:26:31 +000033 return false;
Chris Lattner9c0f8f22001-07-22 04:40:02 +000034}
Vikram S. Adve2d94a342001-07-21 12:42:29 +000035
36
Vikram S. Adve799aed02001-08-28 23:23:14 +000037
Vikram S. Adve2d94a342001-07-21 12:42:29 +000038//---------------------------------------------------------------------------
39// Function main()
40//
Vikram S. Adve799aed02001-08-28 23:23:14 +000041// Entry point for the llc compiler.
Vikram S. Adve2d94a342001-07-21 12:42:29 +000042//---------------------------------------------------------------------------
43
Chris Lattnered226062001-09-07 21:26:31 +000044int main(int argc, char** argv) {
Chris Lattner0af24642001-07-23 02:35:57 +000045 cl::ParseCommandLineOptions(argc, argv, " llvm system compiler\n");
Chris Lattnerf8464e42001-09-14 04:32:55 +000046 TargetMachine *Target = allocateSparcTargetMachine();
Vikram S. Adve799aed02001-08-28 23:23:14 +000047
Chris Lattnerab0cc402001-07-23 19:27:24 +000048 Module *module = ParseBytecodeFile(InputFilename);
Vikram S. Adve2d94a342001-07-21 12:42:29 +000049 if (module == 0) {
50 cerr << "bytecode didn't read correctly.\n";
51 return 1;
52 }
Vikram S. Adve799aed02001-08-28 23:23:14 +000053
Chris Lattnerf8464e42001-09-14 04:32:55 +000054 if (CompileModule(module, *Target)) {
Chris Lattnerab0cc402001-07-23 19:27:24 +000055 cerr << "Error compiling " << InputFilename << "!\n";
56 delete module;
57 return 1;
58 }
Vikram S. Adve2d94a342001-07-21 12:42:29 +000059
60 // Clean up and exit
61 delete module;
Chris Lattnerf8464e42001-09-14 04:32:55 +000062 delete Target;
Vikram S. Adve2d94a342001-07-21 12:42:29 +000063 return 0;
64}
Chris Lattner0a823a02001-09-14 03:37:52 +000065