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:
parent
1999ec2f13
commit
f73201a7b7
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user