blob: 7bf820f9f0e5a045993eaadb97db69d40298dec2 [file] [log] [blame]
Vikram S. Adve2d94a342001-07-21 12:42:29 +00001// $Id$
2//***************************************************************************
3// File:
4// llc.cpp
5//
6// Purpose:
7// Driver for llc compiler.
8//
9// History:
10// 7/15/01 - Vikram Adve - Created
11//
12//**************************************************************************/
13
Vikram S. Adve2d94a342001-07-21 12:42:29 +000014#include "llvm/Module.h"
15#include "llvm/Method.h"
16#include "llvm/Bytecode/Reader.h"
Vikram S. Adve799aed02001-08-28 23:23:14 +000017#include "llvm/Optimizations/Normalize.h"
Chris Lattnerdd511762001-07-21 20:58:30 +000018#include "llvm/CodeGen/InstrSelection.h"
Vikram S. Adve799aed02001-08-28 23:23:14 +000019#include "llvm/CodeGen/InstrScheduling.h"
Chris Lattner9c0f8f22001-07-22 04:40:02 +000020#include "llvm/CodeGen/Sparc.h"
Chris Lattnere2472bb2001-07-23 17:46:59 +000021#include "llvm/Support/CommandLine.h"
Chris Lattner0af24642001-07-23 02:35:57 +000022
Chris Lattnerab0cc402001-07-23 19:27:24 +000023cl::String InputFilename ("", "Input filename", cl::NoFlags, "-");
Chris Lattner0af24642001-07-23 02:35:57 +000024cl::String OutputFilename("o", "Output filename", cl::NoFlags, "");
25
Vikram S. Adve799aed02001-08-28 23:23:14 +000026
27void
28NormalizeMethod(Method* method)
29{
30 NormalizePhiConstantArgs(method);
31}
32
33
34static bool
35CompileModule(Module *M, TargetMachine &target)
36{
Chris Lattner9c0f8f22001-07-22 04:40:02 +000037 bool failed = false;
38
Vikram S. Adve799aed02001-08-28 23:23:14 +000039 for (Module::const_iterator MI = M->begin(), ME = M->end(); MI != ME; ++MI)
40 {
41 Method* method = *MI;
Chris Lattner9c0f8f22001-07-22 04:40:02 +000042
Vikram S. Adve799aed02001-08-28 23:23:14 +000043 NormalizeMethod(method);
44
45 failed = SelectInstructionsForMethod(method, target);
46 if (failed)
47 {
48 cerr << "Instruction selection failed for method "
49 << method->getName() << "\n\n";
50 break;
51 }
52
53 failed = ScheduleInstructionsWithSSA(method, target);
54 if (failed)
55 {
56 cerr << "Instruction scheduling before allocation failed for method "
57 << method->getName() << "\n\n";
58 break;
59 }
Chris Lattner9c0f8f22001-07-22 04:40:02 +000060 }
61
62 return failed;
63}
Vikram S. Adve2d94a342001-07-21 12:42:29 +000064
65
Vikram S. Adve799aed02001-08-28 23:23:14 +000066
Vikram S. Adve2d94a342001-07-21 12:42:29 +000067//---------------------------------------------------------------------------
68// Function main()
69//
Vikram S. Adve799aed02001-08-28 23:23:14 +000070// Entry point for the llc compiler.
Vikram S. Adve2d94a342001-07-21 12:42:29 +000071//---------------------------------------------------------------------------
72
Vikram S. Adve799aed02001-08-28 23:23:14 +000073int
74main(int argc, char** argv)
75{
Chris Lattner0af24642001-07-23 02:35:57 +000076 cl::ParseCommandLineOptions(argc, argv, " llvm system compiler\n");
Vikram S. Adve799aed02001-08-28 23:23:14 +000077 UltraSparc target;
78
Chris Lattnerab0cc402001-07-23 19:27:24 +000079 Module *module = ParseBytecodeFile(InputFilename);
Vikram S. Adve2d94a342001-07-21 12:42:29 +000080 if (module == 0) {
81 cerr << "bytecode didn't read correctly.\n";
82 return 1;
83 }
Vikram S. Adve799aed02001-08-28 23:23:14 +000084
85 if (CompileModule(module, target)) {
Chris Lattnerab0cc402001-07-23 19:27:24 +000086 cerr << "Error compiling " << InputFilename << "!\n";
87 delete module;
88 return 1;
89 }
Vikram S. Adve2d94a342001-07-21 12:42:29 +000090
91 // Clean up and exit
92 delete module;
93 return 0;
94}