Skip to content

Commit 455c396

Browse files
committed
[RISCV][test] Add test coverage for RISCVInstrInfo::isCopyInstrImpl
1 parent 878234b commit 455c396

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

llvm/unittests/Target/RISCV/RISCVInstrInfoTest.cpp

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,69 @@ TEST_P(RISCVInstrInfoTest, IsAddImmediate) {
9494
}
9595
}
9696

97+
TEST_P(RISCVInstrInfoTest, IsCopyInstrImpl) {
98+
const RISCVInstrInfo *TII = ST->getInstrInfo();
99+
DebugLoc DL;
100+
101+
// ADDI.
102+
103+
MachineInstr *MI1 = BuildMI(*MF, DL, TII->get(RISCV::ADDI), RISCV::X1)
104+
.addReg(RISCV::X2)
105+
.addImm(-128)
106+
.getInstr();
107+
auto MI1Res = TII->isCopyInstrImpl(*MI1);
108+
EXPECT_FALSE(MI1Res.has_value());
109+
110+
MachineInstr *MI2 = BuildMI(*MF, DL, TII->get(RISCV::ADDI), RISCV::X1)
111+
.addReg(RISCV::X2)
112+
.addImm(0)
113+
.getInstr();
114+
auto MI2Res = TII->isCopyInstrImpl(*MI2);
115+
ASSERT_TRUE(MI2Res.has_value());
116+
EXPECT_EQ(MI2Res->Destination->getReg(), RISCV::X1);
117+
EXPECT_EQ(MI2Res->Source->getReg(), RISCV::X2);
118+
119+
// Partial coverage of FSGNJ_* instructions.
120+
121+
MachineInstr *MI3 = BuildMI(*MF, DL, TII->get(RISCV::FSGNJ_D), RISCV::F1_D)
122+
.addReg(RISCV::F2_D)
123+
.addReg(RISCV::F1_D)
124+
.getInstr();
125+
auto MI3Res = TII->isCopyInstrImpl(*MI3);
126+
EXPECT_FALSE(MI3Res.has_value());
127+
128+
MachineInstr *MI4 = BuildMI(*MF, DL, TII->get(RISCV::FSGNJ_D), RISCV::F1_D)
129+
.addReg(RISCV::F2_D)
130+
.addReg(RISCV::F2_D)
131+
.getInstr();
132+
auto MI4Res = TII->isCopyInstrImpl(*MI4);
133+
ASSERT_TRUE(MI4Res.has_value());
134+
EXPECT_EQ(MI4Res->Destination->getReg(), RISCV::F1_D);
135+
EXPECT_EQ(MI4Res->Source->getReg(), RISCV::F2_D);
136+
137+
// ADD. TODO: Should return true for add reg, x0 and add x0, reg.
138+
MachineInstr *MI5 = BuildMI(*MF, DL, TII->get(RISCV::ADD), RISCV::X1)
139+
.addReg(RISCV::X2)
140+
.addReg(RISCV::X3)
141+
.getInstr();
142+
auto MI5Res = TII->isCopyInstrImpl(*MI5);
143+
EXPECT_FALSE(MI5Res.has_value());
144+
145+
MachineInstr *MI6 = BuildMI(*MF, DL, TII->get(RISCV::ADD), RISCV::X1)
146+
.addReg(RISCV::X0)
147+
.addReg(RISCV::X2)
148+
.getInstr();
149+
auto MI6Res = TII->isCopyInstrImpl(*MI6);
150+
EXPECT_FALSE(MI6Res.has_value());
151+
152+
MachineInstr *MI7 = BuildMI(*MF, DL, TII->get(RISCV::ADD), RISCV::X1)
153+
.addReg(RISCV::X2)
154+
.addReg(RISCV::X0)
155+
.getInstr();
156+
auto MI7Res = TII->isCopyInstrImpl(*MI7);
157+
EXPECT_FALSE(MI7Res.has_value());
158+
}
159+
97160
TEST_P(RISCVInstrInfoTest, GetMemOperandsWithOffsetWidth) {
98161
const RISCVInstrInfo *TII = ST->getInstrInfo();
99162
const TargetRegisterInfo *TRI = ST->getRegisterInfo();

0 commit comments

Comments
 (0)