@@ -50,6 +50,8 @@ static MCInst beq() {
50
50
.addImm (32 );
51
51
}
52
52
53
+ static MCInst b () { return MCInstBuilder (LoongArch::B).addImm (32 ); }
54
+
53
55
static MCInst bl () { return MCInstBuilder (LoongArch::BL).addImm (32 ); }
54
56
55
57
static MCInst jirl (unsigned RD, unsigned RJ = LoongArch::R10) {
@@ -58,20 +60,23 @@ static MCInst jirl(unsigned RD, unsigned RJ = LoongArch::R10) {
58
60
59
61
TEST_P (InstrAnalysisTest, IsTerminator) {
60
62
EXPECT_TRUE (Analysis->isTerminator (beq ()));
63
+ EXPECT_TRUE (Analysis->isTerminator (b ()));
61
64
EXPECT_FALSE (Analysis->isTerminator (bl ()));
62
65
EXPECT_TRUE (Analysis->isTerminator (jirl (LoongArch::R0)));
63
66
EXPECT_FALSE (Analysis->isTerminator (jirl (LoongArch::R5)));
64
67
}
65
68
66
69
TEST_P (InstrAnalysisTest, IsCall) {
67
70
EXPECT_FALSE (Analysis->isCall (beq ()));
71
+ EXPECT_FALSE (Analysis->isCall (b ()));
68
72
EXPECT_TRUE (Analysis->isCall (bl ()));
69
73
EXPECT_TRUE (Analysis->isCall (jirl (LoongArch::R1)));
70
74
EXPECT_FALSE (Analysis->isCall (jirl (LoongArch::R0)));
71
75
}
72
76
73
77
TEST_P (InstrAnalysisTest, IsReturn) {
74
78
EXPECT_FALSE (Analysis->isReturn (beq ()));
79
+ EXPECT_FALSE (Analysis->isReturn (b ()));
75
80
EXPECT_FALSE (Analysis->isReturn (bl ()));
76
81
EXPECT_TRUE (Analysis->isReturn (jirl (LoongArch::R0, LoongArch::R1)));
77
82
EXPECT_FALSE (Analysis->isReturn (jirl (LoongArch::R0)));
@@ -80,14 +85,26 @@ TEST_P(InstrAnalysisTest, IsReturn) {
80
85
81
86
TEST_P (InstrAnalysisTest, IsBranch) {
82
87
EXPECT_TRUE (Analysis->isBranch (beq ()));
88
+ EXPECT_TRUE (Analysis->isBranch (b ()));
83
89
EXPECT_FALSE (Analysis->isBranch (bl ()));
84
90
EXPECT_TRUE (Analysis->isBranch (jirl (LoongArch::R0)));
85
91
EXPECT_FALSE (Analysis->isBranch (jirl (LoongArch::R1)));
86
92
EXPECT_FALSE (Analysis->isBranch (jirl (LoongArch::R0, LoongArch::R1)));
87
93
}
88
94
95
+ TEST_P (InstrAnalysisTest, IsConditionalBranch) {
96
+ EXPECT_TRUE (Analysis->isConditionalBranch (beq ()));
97
+ // FIXME: Instr 'b' is not a ConditionalBranch, so the analysis here is
98
+ // wrong. The following patch will fix it.
99
+ EXPECT_TRUE (Analysis->isConditionalBranch (b ()));
100
+ EXPECT_FALSE (Analysis->isConditionalBranch (bl ()));
101
+ }
102
+
89
103
TEST_P (InstrAnalysisTest, IsUnconditionalBranch) {
90
104
EXPECT_FALSE (Analysis->isUnconditionalBranch (beq ()));
105
+ // FIXME: Instr 'b' is an UnconditionalBranch, so the analysis here is
106
+ // wrong. The following patch will fix it.
107
+ EXPECT_FALSE (Analysis->isUnconditionalBranch (b ()));
91
108
EXPECT_FALSE (Analysis->isUnconditionalBranch (bl ()));
92
109
EXPECT_TRUE (Analysis->isUnconditionalBranch (jirl (LoongArch::R0)));
93
110
EXPECT_FALSE (Analysis->isUnconditionalBranch (jirl (LoongArch::R1)));
@@ -97,6 +114,7 @@ TEST_P(InstrAnalysisTest, IsUnconditionalBranch) {
97
114
98
115
TEST_P (InstrAnalysisTest, IsIndirectBranch) {
99
116
EXPECT_FALSE (Analysis->isIndirectBranch (beq ()));
117
+ EXPECT_FALSE (Analysis->isIndirectBranch (b ()));
100
118
EXPECT_FALSE (Analysis->isIndirectBranch (bl ()));
101
119
EXPECT_TRUE (Analysis->isIndirectBranch (jirl (LoongArch::R0)));
102
120
EXPECT_FALSE (Analysis->isIndirectBranch (jirl (LoongArch::R1)));
0 commit comments