Don't forget to link type names together too. Fix for Olden/mst benchmark
[oota-llvm.git] / lib / VMCore / iOperators.cpp
index ef6933adb2535ea2d4fa4a7df03c20fae33584cc..22b6052d4692dd5f484e22795387e0011bf5767b 100644 (file)
@@ -1,25 +1,63 @@
-//===-- 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"
 
-BinaryOperator *BinaryOperator::create(unsigned Op, Value *S1, Value *S2,
+//===----------------------------------------------------------------------===//
+//                              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) {
   // Binary comparison operators...
   case SetLT: case SetGT: case SetLE:
   case SetGE: case SetEQ: case SetNE:
-    return new SetCondInst((BinaryOps)Op, S1, S2, Name);
+    return new SetCondInst(Op, S1, S2, Name);
 
   default:
     return new GenericBinaryInst(Op, S1, S2, Name);
   }
 }
 
+
+//===----------------------------------------------------------------------===//
+//                            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
 //===----------------------------------------------------------------------===//