Make the FunctionComparator of the MergeFunctions pass a stand-alone utility.
authorErik Eckstein <eeckstein@apple.com>
Fri, 11 Nov 2016 21:15:13 +0000 (21:15 +0000)
committerErik Eckstein <eeckstein@apple.com>
Fri, 11 Nov 2016 21:15:13 +0000 (21:15 +0000)
commit4d6fb72aa93dee764f2dac5dcf324bf45f062e4b
tree14288591bdfa8b1f33a73061f8f081ec70155bab
parent653e3f4e197d6d27710f09366bf9542ea617594f
Make the FunctionComparator of the MergeFunctions pass a stand-alone utility.

This is pure refactoring. NFC.

This change moves the FunctionComparator (together with the GlobalNumberState
utility) in to a separate file so that it can be used by other passes.
For example, the SwiftMergeFunctions pass in the Swift compiler:
https://github.com/apple/swift/blob/master/lib/LLVMPasses/LLVMMergeFunctions.cpp

Details of the change:

*) The big part is just moving code out of MergeFunctions.cpp into FunctionComparator.h/cpp
*) Make FunctionComparator member functions protected (instead of private)
   so that a derived comparator class can use them.

Following refactoring helps to share code between the base FunctionComparator
class and a derived class:

*) Add a beginCompare() function
*) Move some basic function property comparisons into a separate function compareSignature()
*) Do the GEP comparison inside cmpOperations() which now has a new
   needToCmpOperands reference parameter

https://reviews.llvm.org/D25385

llvm-svn: 286632
llvm/include/llvm/Transforms/Utils/FunctionComparator.h [new file with mode: 0644]
llvm/lib/Transforms/IPO/MergeFunctions.cpp
llvm/lib/Transforms/Utils/CMakeLists.txt
llvm/lib/Transforms/Utils/FunctionComparator.cpp [new file with mode: 0644]
llvm/unittests/Transforms/Utils/CMakeLists.txt
llvm/unittests/Transforms/Utils/FunctionComparator.cpp [new file with mode: 0644]