This is an archive of the discontinued LLVM Phabricator instance.

[IRSim] Adding support for isomorphic predicates

Authored by AndrewLitteken on Sep 8 2020, 11:31 AM.



Some predicates, can be considered the same as long as the operands are flipped. For example, a > b gives the same result as b > a. This maps instructions in a greater than form, to their appropriate less than form, swapping the operands in the IRInstructionData only, allowing for more flexible matching.


  • llvm/test/Transforms/IROutliner/outlining-isomorphic-predicates.ll
  • llvm/unittests/Analysis/IRSimilarityIdentifierTest.cpp

Diff Detail

Event Timeline

AndrewLitteken created this revision.Sep 8 2020, 11:31 AM
Herald added a project: Restricted Project. · View Herald TranscriptSep 8 2020, 11:31 AM
jroelofs added inline comments.

Should equality and inequality also be canonicalized? Maybe your hash function can be tweaked to use an operation that's commutative specifically in that case.

jroelofs added inline comments.Sep 10 2020, 2:34 PM

Oh, I see that's being handled here:

jroelofs accepted this revision.Sep 14 2020, 1:26 PM



Since we generally don't build with exceptions turned on, it makes more sense to talk about what's allowed/not in the function's contract, rather than mentioning that assertion failures "throw".

This revision is now accepted and ready to land.Sep 14 2020, 1:26 PM

A few things changed just enough since OperTypes was removed, so updating the diff to reflect this.

This revision was automatically updated to reflect the committed changes.