summaryrefslogtreecommitdiff
path: root/lib/VMCore/Instruction.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/VMCore/Instruction.cpp')
-rw-r--r--lib/VMCore/Instruction.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/lib/VMCore/Instruction.cpp b/lib/VMCore/Instruction.cpp
new file mode 100644
index 0000000000..4b528f0d94
--- /dev/null
+++ b/lib/VMCore/Instruction.cpp
@@ -0,0 +1,61 @@
+//===-- Instruction.cpp - Implement the Instruction class --------*- C++ -*--=//
+//
+// This file implements the Instruction class for the VMCore library.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Instruction.h"
+#include "llvm/BasicBlock.h"
+#include "llvm/Method.h"
+#include "llvm/SymbolTable.h"
+#include "llvm/iBinary.h"
+#include "llvm/iUnary.h"
+
+Instruction::Instruction(const Type *ty, unsigned it, const string &Name)
+ : User(ty, Value::InstructionVal, Name) {
+ Parent = 0;
+ iType = it;
+}
+
+Instruction::~Instruction() {
+ assert(getParent() == 0 && "Instruction still embeded in basic block!");
+}
+
+// Specialize setName to take care of symbol table majik
+void Instruction::setName(const string &name) {
+ BasicBlock *P = 0; Method *PP = 0;
+ if ((P = getParent()) && (PP = P->getParent()) && hasName())
+ PP->getSymbolTable()->remove(this);
+ Value::setName(name);
+ if (PP && hasName()) PP->getSymbolTableSure()->insert(this);
+}
+
+Instruction *Instruction::getBinaryOperator(unsigned Op, Value *S1, Value *S2) {
+ switch (Op) {
+ case Add:
+ return new AddInst(S1, S2);
+ case Sub:
+ return new SubInst(S1, S2);
+
+ case SetLT:
+ case SetGT:
+ case SetLE:
+ case SetGE:
+ case SetEQ:
+ case SetNE:
+ return new SetCondInst((BinaryOps)Op, S1, S2);
+
+ default:
+ cerr << "Don't know how to GetBinaryOperator " << Op << endl;
+ return 0;
+ }
+}
+
+
+Instruction *Instruction::getUnaryOperator(unsigned Op, Value *Source) {
+ switch (Op) {
+ default:
+ cerr << "Don't know how to GetUnaryOperator " << Op << endl;
+ return 0;
+ }
+}