1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 12:41:49 +01:00

[GISel][NFC]: Add unit test for clarifying CSE behavior

Add a unit test that shows how CSE works if we install an observer
at the machine function level and not use the CSEMIRBuilder to build
instructions.

https://reviews.llvm.org/D81625
This commit is contained in:
Aditya Nandakumar 2020-06-11 12:29:12 -07:00
parent 1999ec2f13
commit f73201a7b7

View File

@ -77,6 +77,25 @@ TEST_F(AArch64GISelMITest, TestCSE) {
auto Undef0 = CSEB.buildUndef(s32);
auto Undef1 = CSEB.buildUndef(s32);
EXPECT_EQ(&*Undef0, &*Undef1);
// If the observer is installed to the MF, CSE can also
// track new instructions built without the CSEBuilder and
// the newly built instructions are available for CSEing next
// time a build call is made through the CSEMIRBuilder.
// Additionally, the CSE implementation lazily hashes instructions
// (every build call) to give chance for the instruction to be fully
// built (say using .addUse().addDef().. so on).
GISelObserverWrapper WrapperObserver(&CSEInfo);
RAIIMFObsDelInstaller Installer(*MF, WrapperObserver);
MachineIRBuilder RegularBuilder(*MF);
RegularBuilder.setInsertPt(*EntryMBB, EntryMBB->begin());
auto NonCSEFMul = RegularBuilder.buildInstr(TargetOpcode::G_AND)
.addDef(MRI->createGenericVirtualRegister(s32))
.addUse(Copies[0])
.addUse(Copies[1]);
auto CSEFMul =
CSEB.buildInstr(TargetOpcode::G_AND, {s32}, {Copies[0], Copies[1]});
EXPECT_EQ(&*CSEFMul, &*NonCSEFMul);
}
TEST_F(AArch64GISelMITest, TestCSEConstantConfig) {