1 //===- llvm/unittest/VMCore/InstructionsTest.cpp - Instructions unit tests ===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "llvm/Instructions.h"
11 #include "llvm/BasicBlock.h"
12 #include "llvm/DerivedTypes.h"
13 #include "llvm/LLVMContext.h"
14 #include "llvm/ADT/STLExtras.h"
15 #include "gtest/gtest.h"
20 TEST(InstructionsTest
, ReturnInst
) {
21 LLVMContext
&C(getGlobalContext());
24 const ReturnInst
* r0
= ReturnInst::Create(C
);
25 EXPECT_EQ(r0
->getNumOperands(), 0U);
26 EXPECT_EQ(r0
->op_begin(), r0
->op_end());
28 const IntegerType
* Int1
= IntegerType::get(C
, 1);
29 Constant
* One
= ConstantInt::get(Int1
, 1, true);
30 const ReturnInst
* r1
= ReturnInst::Create(C
, One
);
31 EXPECT_EQ(r1
->getNumOperands(), 1U);
32 User::const_op_iterator
b(r1
->op_begin());
33 EXPECT_NE(b
, r1
->op_end());
35 EXPECT_EQ(r1
->getOperand(0), One
);
37 EXPECT_EQ(b
, r1
->op_end());
44 TEST(InstructionsTest
, BranchInst
) {
45 LLVMContext
&C(getGlobalContext());
48 BasicBlock
* bb0
= BasicBlock::Create(C
);
49 BasicBlock
* bb1
= BasicBlock::Create(C
);
51 // Mandatory BranchInst
52 const BranchInst
* b0
= BranchInst::Create(bb0
);
54 EXPECT_TRUE(b0
->isUnconditional());
55 EXPECT_FALSE(b0
->isConditional());
56 EXPECT_EQ(b0
->getNumSuccessors(), 1U);
59 EXPECT_EQ(b0
->getNumOperands(), 1U);
61 EXPECT_NE(b0
->op_begin(), b0
->op_end());
62 EXPECT_EQ(llvm::next(b0
->op_begin()), b0
->op_end());
64 EXPECT_EQ(llvm::next(b0
->op_begin()), b0
->op_end());
66 const IntegerType
* Int1
= IntegerType::get(C
, 1);
67 Constant
* One
= ConstantInt::get(Int1
, 1, true);
69 // Conditional BranchInst
70 BranchInst
* b1
= BranchInst::Create(bb0
, bb1
, One
);
72 EXPECT_FALSE(b1
->isUnconditional());
73 EXPECT_TRUE(b1
->isConditional());
74 EXPECT_EQ(b1
->getNumSuccessors(), 2U);
77 EXPECT_EQ(b1
->getNumOperands(), 3U);
79 User::const_op_iterator
b(b1
->op_begin());
82 EXPECT_NE(b
, b1
->op_end());
84 EXPECT_EQ(b1
->getOperand(0), One
);
85 EXPECT_EQ(b1
->getCondition(), One
);
90 EXPECT_EQ(b1
->getOperand(1), bb1
);
91 EXPECT_EQ(b1
->getSuccessor(1), bb1
);
96 EXPECT_EQ(b1
->getOperand(2), bb0
);
97 EXPECT_EQ(b1
->getSuccessor(0), bb0
);
100 EXPECT_EQ(b
, b1
->op_end());
110 TEST(InstructionsTest
, CastInst
) {
111 LLVMContext
&C(getGlobalContext());
113 const Type
* Int8Ty
= Type::getInt8Ty(C
);
114 const Type
* Int64Ty
= Type::getInt64Ty(C
);
115 const Type
* V8x8Ty
= VectorType::get(Int8Ty
, 8);
116 const Type
* X86MMXTy
= Type::getX86_MMXTy(C
);
118 EXPECT_TRUE(CastInst::isCastable(V8x8Ty
, X86MMXTy
));
119 EXPECT_TRUE(CastInst::isCastable(X86MMXTy
, V8x8Ty
));
120 EXPECT_FALSE(CastInst::isCastable(Int64Ty
, X86MMXTy
));
123 } // end anonymous namespace
124 } // end namespace llvm