Karl Schimpf | 8d7abae | 2014-07-07 14:50:30 -0700 | [diff] [blame] | 1 | //===- subzero/src/IceTranslator.cpp - ICE to machine code ------*- C++ -*-===// |
| 2 | // |
| 3 | // The Subzero Code Generator |
| 4 | // |
| 5 | // This file is distributed under the University of Illinois Open Source |
| 6 | // License. See LICENSE.TXT for details. |
| 7 | // |
| 8 | //===----------------------------------------------------------------------===// |
| 9 | // |
| 10 | // This file defines the general driver class for translating ICE to |
| 11 | // machine code. |
| 12 | // |
| 13 | //===----------------------------------------------------------------------===// |
| 14 | |
| 15 | #include "IceTranslator.h" |
| 16 | |
| 17 | #include "IceCfg.h" |
| 18 | #include "IceClFlags.h" |
| 19 | #include "IceTargetLowering.h" |
| 20 | |
| 21 | #include <iostream> |
| 22 | |
| 23 | using namespace Ice; |
| 24 | |
| 25 | Translator::~Translator() {} |
| 26 | |
| 27 | void Translator::translateFcn(Ice::Cfg *Fcn) { |
| 28 | Func.reset(Fcn); |
Jim Stichnoth | 989a703 | 2014-08-08 10:13:44 -0700 | [diff] [blame^] | 29 | if (Ctx->getFlags().DisableInternal) |
Karl Schimpf | 8d7abae | 2014-07-07 14:50:30 -0700 | [diff] [blame] | 30 | Func->setInternal(false); |
Jim Stichnoth | 989a703 | 2014-08-08 10:13:44 -0700 | [diff] [blame^] | 31 | if (Ctx->getFlags().DisableTranslation) { |
Karl Schimpf | 8d7abae | 2014-07-07 14:50:30 -0700 | [diff] [blame] | 32 | Func->dump(); |
| 33 | } else { |
| 34 | Ice::Timer TTranslate; |
| 35 | Func->translate(); |
Jim Stichnoth | 989a703 | 2014-08-08 10:13:44 -0700 | [diff] [blame^] | 36 | if (Ctx->getFlags().SubzeroTimingEnabled) { |
Karl Schimpf | 8d7abae | 2014-07-07 14:50:30 -0700 | [diff] [blame] | 37 | std::cerr << "[Subzero timing] Translate function " |
| 38 | << Func->getFunctionName() << ": " << TTranslate.getElapsedSec() |
| 39 | << " sec\n"; |
| 40 | } |
| 41 | if (Func->hasError()) { |
| 42 | std::cerr << "ICE translation error: " << Func->getError() << "\n"; |
Karl Schimpf | b164d20 | 2014-07-11 10:26:34 -0700 | [diff] [blame] | 43 | ErrorStatus = true; |
Karl Schimpf | 8d7abae | 2014-07-07 14:50:30 -0700 | [diff] [blame] | 44 | } |
| 45 | |
| 46 | Ice::Timer TEmit; |
| 47 | Func->emit(); |
Jim Stichnoth | 989a703 | 2014-08-08 10:13:44 -0700 | [diff] [blame^] | 48 | if (Ctx->getFlags().SubzeroTimingEnabled) { |
Karl Schimpf | 8d7abae | 2014-07-07 14:50:30 -0700 | [diff] [blame] | 49 | std::cerr << "[Subzero timing] Emit function " << Func->getFunctionName() |
| 50 | << ": " << TEmit.getElapsedSec() << " sec\n"; |
| 51 | } |
| 52 | } |
| 53 | } |
| 54 | |
| 55 | void Translator::emitConstants() { |
Jim Stichnoth | 989a703 | 2014-08-08 10:13:44 -0700 | [diff] [blame^] | 56 | if (!Ctx->getFlags().DisableTranslation && Func) |
Karl Schimpf | 8d7abae | 2014-07-07 14:50:30 -0700 | [diff] [blame] | 57 | Func->getTarget()->emitConstants(); |
| 58 | } |