[InstCombine] Allow to limit the max number of iterations
authorJakub Kuderski <kubak@google.com>
Wed, 18 Dec 2019 18:48:54 +0000 (13:48 -0500)
committerJakub Kuderski <kubak@google.com>
Wed, 18 Dec 2019 18:48:54 +0000 (13:48 -0500)
commit406b6019cd2bd50924be11c634b058c01053fbd3
tree4d74b0b31b2b0278055dd877600b2c56c0b1fb12
parentb6e90a1a1093210784ed3614b51ebcc31c2a1dcf
[InstCombine] Allow to limit the max number of iterations

Summary:
This patch teaches InstCombine to accept a new parameter: maximum number of iterations over functions.

InstCombine tries to simplify instructions by iterating over the whole function until the function stops changing. As a consequence, the last iteration before reaching a fixpoint visits all instructions in the worklist and never performs any rewrites.

Bounding the number of iterations can have 2 benefits:
* In case the users of the pass can make a good guess about the number of required iterations, we can save the time normally spent on the last iteration that doesn't change anything.
* When the wants to use InstCombine as a cleanup pass, it may be enough to run just a few iterations and stop even before reaching a fixpoint. This can be also useful for implementing a lightweight pass pipeline (think `-O1`).

This patch does not change the behavior of opt or Clang -- limiting the number of iterations is entirely opt-in.

Reviewers: fhahn, davide, spatel, foad, nlopes, grosser, lebedev.ri, nikic, xbolva00

Reviewed By: spatel

Subscribers: craig.topper, hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D71145
llvm/include/llvm/Transforms/InstCombine/InstCombine.h
llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
llvm/test/Transforms/InstCombine/limit-max-iterations.ll [new file with mode: 0644]