| Index: src/IceTranslator.cpp
|
| diff --git a/src/IceTranslator.cpp b/src/IceTranslator.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1104c519b8dd9deb304e583a048c0142e5e5e983
|
| --- /dev/null
|
| +++ b/src/IceTranslator.cpp
|
| @@ -0,0 +1,57 @@
|
| +//===- subzero/src/IceTranslator.cpp - Translate IR to ICE ------*- C++ -*-===//
|
| +//
|
| +// The Subzero Code Generator
|
| +//
|
| +// This file is distributed under the University of Illinois Open Source
|
| +// License. See LICENSE.TXT for details.
|
| +//
|
| +//===----------------------------------------------------------------------===//
|
| +//
|
| +// This file defines the general driver class for translating IR to ICE.
|
| +//
|
| +//===----------------------------------------------------------------------===//
|
| +
|
| +#include "IceTranslator.h"
|
| +
|
| +#include "IceCfg.h"
|
| +#include "IceTargetLowering.h"
|
| +
|
| +#include <iostream>
|
| +
|
| +using namespace Ice;
|
| +
|
| +Translator::~Translator() {}
|
| +
|
| +void Translator::translateFcn(Ice::Cfg *Fcn) {
|
| + Func.reset(Fcn);
|
| + if (Flags.DisableInternal)
|
| + Func->setInternal(false);
|
| + if (Flags.DisableTranslation) {
|
| + Func->dump();
|
| + } else {
|
| + Ice::Timer TTranslate;
|
| + Func->translate();
|
| + if (Flags.SubzeroTimingEnabled) {
|
| + std::cerr << "[Subzero timing] Translate function "
|
| + << Func->getFunctionName() << ": "
|
| + << TTranslate.getElapsedSec() << " sec\n";
|
| + }
|
| + if (Func->hasError()) {
|
| + std::cerr << "ICE translation error: " << Func->getError() << "\n";
|
| + ExitStatus = 1;
|
| + }
|
| +
|
| + Ice::Timer TEmit;
|
| + Func->emit();
|
| + if (Flags.SubzeroTimingEnabled) {
|
| + std::cerr << "[Subzero timing] Emit function "
|
| + << Func->getFunctionName() << ": " << TEmit.getElapsedSec()
|
| + << " sec\n";
|
| + }
|
| + }
|
| +}
|
| +
|
| +void Translator::emitConstants() {
|
| + if (!Flags.DisableTranslation && Func)
|
| + Func->getTarget()->emitConstants();
|
| +}
|
|
|