add BranchInst tests
authorGabor Greif <ggreif@gmail.com>
Tue, 16 Mar 2010 15:26:09 +0000 (15:26 +0000)
committerGabor Greif <ggreif@gmail.com>
Tue, 16 Mar 2010 15:26:09 +0000 (15:26 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98632 91177308-0d34-0410-b5e6-96231b3b80d8

unittests/VMCore/InstructionsTest.cpp

index 2d98cad27fb8b1ee60b459fef4d78e2f4884c41e..800511e254beaeb3cb40188dc281e07be3b9011f 100644 (file)
@@ -8,6 +8,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "llvm/Instructions.h"
+#include "llvm/BasicBlock.h"
 #include "llvm/DerivedTypes.h"
 #include "llvm/LLVMContext.h"
 #include "gtest/gtest.h"
@@ -20,11 +21,13 @@ TEST(InstructionsTest, ReturnInst) {
 
   // test for PR6589
   const ReturnInst* r0 = ReturnInst::Create(C);
+  EXPECT_EQ(r0->getNumOperands(), 0U);
   EXPECT_EQ(r0->op_begin(), r0->op_end());
 
   const IntegerType* Int1 = IntegerType::get(C, 1);
   Constant* One = ConstantInt::get(Int1, 1, true);
   const ReturnInst* r1 = ReturnInst::Create(C, One);
+  EXPECT_EQ(r1->getNumOperands(), 1U);
   User::const_op_iterator b(r1->op_begin());
   EXPECT_NE(b, r1->op_end());
   EXPECT_EQ(*b, One);
@@ -37,5 +40,73 @@ TEST(InstructionsTest, ReturnInst) {
   delete r1;
 }
 
+TEST(InstructionsTest, BranchInst) {
+  LLVMContext &C(getGlobalContext());
+
+  // Make a BasicBlocks
+  BasicBlock* bb0 = BasicBlock::Create(C);
+  BasicBlock* bb1 = BasicBlock::Create(C);
+
+  // Mandatory BranchInst
+  const BranchInst* b0 = BranchInst::Create(bb0);
+
+  // check num operands
+  EXPECT_EQ(b0->getNumOperands(), 1U);
+
+  EXPECT_NE(b0->op_begin(), b0->op_end());
+
+  const IntegerType* Int1 = IntegerType::get(C, 1);
+  Constant* One = ConstantInt::get(Int1, 1, true);
+
+  // Conditional BranchInst
+  BranchInst* b1 = BranchInst::Create(bb0, bb1, One);
+
+  // check num operands
+  EXPECT_EQ(b1->getNumOperands(), 3U);
+
+  User::const_op_iterator b(b1->op_begin());
+
+  // check COND
+  EXPECT_NE(b, b1->op_end());
+  EXPECT_EQ(*b, One);
+  EXPECT_EQ(b1->getOperand(0), One);
+  ++b;
+
+  // check ELSE
+  EXPECT_EQ(*b, bb1);
+  EXPECT_EQ(b1->getOperand(1), bb1);
+  ++b;
+
+  // check THEN
+  EXPECT_EQ(*b, bb0);
+  EXPECT_EQ(b1->getOperand(2), bb0);
+  ++b;
+
+  EXPECT_EQ(b, b1->op_end());
+
+  // shrink it
+  b1->setUnconditionalDest(bb1);
+
+  // check num operands
+  EXPECT_EQ(b1->getNumOperands(), 1U);
+
+  User::const_op_iterator c(b1->op_begin());
+  EXPECT_NE(c, b1->op_end());
+
+  // check THEN
+  EXPECT_EQ(*c, bb1);
+  EXPECT_EQ(b1->getOperand(0), bb1);
+  ++c;
+
+  EXPECT_EQ(c, b1->op_end());
+
+  // clean up
+  delete b0;
+  delete b1;
+
+  delete bb0;
+  delete bb1;
+}
+
 }  // end anonymous namespace
 }  // end namespace llvm