[IRSim] Adding IR Instruction Mapper
authorAndrew Litteken <andrew_litteken@apple.com>
Thu, 17 Sep 2020 01:24:29 +0000 (20:24 -0500)
committerAndrew Litteken <andrew_litteken@apple.com>
Thu, 17 Sep 2020 01:49:21 +0000 (20:49 -0500)
commitb04c1a9d3127730c05e8a22a0e931a12a39528df
tree925559d56132dd736a658385612983b0ac69406e
parentf4ea0f98142a97666cd0478757570e819923a829
[IRSim] Adding IR Instruction Mapper

This introduces the IRInstructionMapper, and the associated wrapper for
instructions, IRInstructionData, that maps IR level Instructions to
unsigned integers.

Mapping is done mainly by using the "isSameOperationAs" comparison
between two instructions.  If they return true, the opcode, result type,
and operand types of the instruction are used to hash the instruction
with an unsigned integer.  The mapper accepts instruction ranges, and
adds each resulting integer to a list, and each wrapped instruction to
a separate list.

At present, branches, phi nodes are not mapping and exception handling
is illegal.  Debug instructions are not considered.

The different mapping schemes are tested in
unittests/Analysis/IRSimilarityIdentifierTest.cpp

Differential Revision: https://reviews.llvm.org/D86968
llvm/include/llvm/Analysis/IRSimilarityIdentifier.h [new file with mode: 0644]
llvm/lib/Analysis/CMakeLists.txt
llvm/lib/Analysis/IRSimilarityIdentifier.cpp [new file with mode: 0644]
llvm/unittests/Analysis/CMakeLists.txt
llvm/unittests/Analysis/IRSimilarityIdentifierTest.cpp [new file with mode: 0644]