Add support for casting operators
[oota-llvm.git] / lib / VMCore / iOperators.cpp
index 61d5d26d2b4194033654a747ed836b4b0c834080..22b6052d4692dd5f484e22795387e0011bf5767b 100644 (file)
@@ -1,12 +1,45 @@
-//===-- iBinaryOperators.cpp - Implement the BinaryOperators -----*- C++ -*--=//
+//===-- iOperators.cpp - Implement the Binary & Unary Operators --*- C++ -*--=//
 //
-// This file implements the nontrivial binary operator instructions.
+// This file implements the nontrivial binary & unary operator instructions.
 //
 //===----------------------------------------------------------------------===//
 
-#include "llvm/iBinary.h"
+#include "llvm/iOperators.h"
 #include "llvm/Type.h"
 
+//===----------------------------------------------------------------------===//
+//                              UnaryOperator Class
+//===----------------------------------------------------------------------===//
+
+UnaryOperator *UnaryOperator::create(UnaryOps Op, Value *Source) {
+  switch (Op) {
+  case Not:  return new GenericUnaryInst(Op, Source);
+  default:
+    cerr << "Don't know how to Create UnaryOperator " << Op << endl;
+    return 0;
+  }
+}
+
+
+//===----------------------------------------------------------------------===//
+//                           GenericUnaryOperator Class
+//===----------------------------------------------------------------------===//
+
+const char *GenericUnaryInst::getOpcodeName() const {
+  switch (getOpcode()) {
+  case Not: return "not";
+  case Cast: return "cast";
+  default:
+    cerr << "Invalid unary operator type!" << getOpcode() << endl;
+    abort();
+  }
+}
+
+
+//===----------------------------------------------------------------------===//
+//                             BinaryOperator Class
+//===----------------------------------------------------------------------===//
+
 BinaryOperator *BinaryOperator::create(BinaryOps Op, Value *S1, Value *S2,
                                       const string &Name) {
   switch (Op) {
@@ -20,6 +53,11 @@ BinaryOperator *BinaryOperator::create(BinaryOps Op, Value *S1, Value *S2,
   }
 }
 
+
+//===----------------------------------------------------------------------===//
+//                            GenericBinaryInst Class
+//===----------------------------------------------------------------------===//
+
 const char *GenericBinaryInst::getOpcodeName() const {
   switch (getOpcode()) {
   // Standard binary operators...
@@ -35,10 +73,11 @@ const char *GenericBinaryInst::getOpcodeName() const {
   case Xor: return "xor";
   default:
     cerr << "Invalid binary operator type!" << getOpcode() << endl;
-    return 0;
+    abort();
   }
 }
 
+
 //===----------------------------------------------------------------------===//
 //                             SetCondInst Class
 //===----------------------------------------------------------------------===//