diff options
author | Quentin Colombet <qcolombet@apple.com> | 2016-02-10 22:59:27 +0000 |
---|---|---|
committer | Quentin Colombet <qcolombet@apple.com> | 2016-02-10 22:59:27 +0000 |
commit | 2ecff3bff26c6481bf526d68ef927433474ccac7 (patch) | |
tree | cfdf15b8bdbcde4276a265e14c45eccbaf35142a /llvm/lib | |
parent | b87dec4b56737f1d7c78616407a1bc56969bb883 (diff) | |
download | bcm5719-llvm-2ecff3bff26c6481bf526d68ef927433474ccac7.tar.gz bcm5719-llvm-2ecff3bff26c6481bf526d68ef927433474ccac7.zip |
[GlobalISel] More detailed skeleton for the IRTranslator.
llvm-svn: 260456
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp index efb4ead0a94..704b01966f7 100644 --- a/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp +++ b/llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp @@ -12,20 +12,39 @@ #include "llvm/CodeGen/GlobalISel/IRTranslator.h" +#include "llvm/CodeGen/MachineFunction.h" +#include "llvm/IR/Function.h" + +#define DEBUG_TYPE "irtranslator" + using namespace llvm; char IRTranslator::ID = 0; bool IRTranslator::translateADD(const Instruction &Inst) { + // Get or create a virtual register for each value. + // Unless the value is a Constant => loadimm cst? + // or inline constant each time? + // Creation of a virtual register needs to have a size. return false; } -bool IRTranslator::translate(const Instruction &) { - return false; +bool IRTranslator::translate(const Instruction &Inst) { + switch(Inst.getOpcode()) { + case Instruction::Add: { + return translateADD(Inst); + default: + llvm_unreachable("Opcode not supported"); + } + } } void IRTranslator::finalize() { + // Release the memory used by the different maps we + // needed during the translation. + ValToVRegs.clear(); + Constants.clear(); } IRTranslator::IRTranslator() @@ -33,5 +52,15 @@ IRTranslator::IRTranslator() } bool IRTranslator::runOnMachineFunction(MachineFunction &MF) { + const Function &F = *MF.getFunction(); + for (const BasicBlock &BB: F) { + for (const Instruction &Inst: BB) { + bool Succeeded = translate(Inst); + if (!Succeeded) { + DEBUG(dbgs() << "Cannot translate: " << Inst << '\n'); + report_fatal_error("Unable to translate instruction"); + } + } + } return false; } |