[PATCH] D81625: [GISel][NFC]: Add unit test for clarifying CSE behavior
Aditya Nandakumar via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 10 18:20:18 PDT 2020
aditya_nandakumar created this revision.
aditya_nandakumar added reviewers: arsenm, dsanders, paquette, aemerson.
Herald added a subscriber: wdng.
Herald added a project: LLVM.
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.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D81625
Files:
llvm/unittests/CodeGen/GlobalISel/CSETest.cpp
Index: llvm/unittests/CodeGen/GlobalISel/CSETest.cpp
===================================================================
--- llvm/unittests/CodeGen/GlobalISel/CSETest.cpp
+++ llvm/unittests/CodeGen/GlobalISel/CSETest.cpp
@@ -77,6 +77,25 @@
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 implememtation 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) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D81625.270016.patch
Type: text/x-patch
Size: 1425 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200611/23906cf1/attachment.bin>
More information about the llvm-commits
mailing list