aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/MachinePassManager.cpp
diff options
context:
space:
mode:
authorSerguei Katkov <serguei.katkov@azul.com>2020-08-12 14:25:18 +0700
committerSerguei Katkov <serguei.katkov@azul.com>2020-08-13 23:16:27 +0700
commit98ba0a5ffee219f503a9dc2526f609da832ebf01 (patch)
tree1f3ea1189631c049291e7ecdec1be3162b4c193d /llvm/lib/CodeGen/MachinePassManager.cpp
parentb36e22d64458fb87119eddc383229b6d0493967b (diff)
downloadllvm-98ba0a5ffee219f503a9dc2526f609da832ebf01.zip
llvm-98ba0a5ffee219f503a9dc2526f609da832ebf01.tar.gz
llvm-98ba0a5ffee219f503a9dc2526f609da832ebf01.tar.bz2
[InstCombine] Handle gc.relocate(null) in one iteration
InstCombine adds users of transformed instruction to working list to process on the same iteration. However gc.relocate may have a hidden user (next gc.relocate) which is connected through gc.statepoint intrinsic and there is no direct def-use chain between them. In this case if the next gc.relocation is already processed it will not be added to worklist and will not be able to be processed on the same iteration. Let's we have the following case: A = gc.relocate(null) B = statepoint(A) C = gc.relocate(B, hidden(A)) If C is already considered then after replacement of A with null, statepoint B instruction will be added to the queue but not C. C can be processed only on the next iteration. If the chain of relocation is pretty long the many iteration may be required. This change is to reduce the number of iteration to meet the latest changes related to reducing infinite loop threshold. This is a quick (not best) fix. In the follow up patches I plan to move gc relocation handling into statepoint handler. This should also help to remove unused gc live entries in statepoint bundle. Reviewers: reames, dantrushin Reviewed By: reames Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D75598
Diffstat (limited to 'llvm/lib/CodeGen/MachinePassManager.cpp')
0 files changed, 0 insertions, 0 deletions