InstCombine tries to swap compare operands to match sub instructions in order to expose "CSE opportunities". However, it doesn't really make sense to perform this transform in the middle-end, as we cannot actually CSE the instructions there.
The backend already performs this fold in https://github.com/llvm/llvm-project/blob/18f5446a45da5a61dbfb1b7667d27fb441ac62db/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp#L4236 on the SDAG level, however this only works within a single basic block.
To handle cross-BB cases, we do need to handle this on the IR layer. This patch moves the fold from InstCombine to CGP in the backend, while keeping the same, somewhat dubious, heuristic.
I feel like this limiter has a story behind it - but I'm not sure whether we need to do anything about it......