[Attributor] Implement "norecurse" function attribute deduction
authorHideto Ueno <uenoku.tokotoko@gmail.com>
Sat, 21 Sep 2019 15:13:19 +0000 (15:13 +0000)
committerHideto Ueno <uenoku.tokotoko@gmail.com>
Sat, 21 Sep 2019 15:13:19 +0000 (15:13 +0000)
commit63f6066b53d5094945fc47f382480290520b1605
tree3aa771e6bff2a80b1a3906157ccc900bce209626
parent9ec7117506355771a8410b6c92c94bc6f6754ffb
[Attributor] Implement "norecurse" function attribute deduction

Summary:
This patch introduces `norecurse` function attribute deduction.

`norecurse` will be deduced if the following conditions hold:
* The size of SCC in which the function belongs equals to 1.
* The function doesn't have self-recursion.
* We have `norecurse` for all call site.

To avoid a large change, SCC is calculated using scc_iterator in InfoCache initialization for now.

Reviewers: jdoerfert, sstefan1

Reviewed By: jdoerfert

Subscribers: hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D67751

llvm-svn: 372475
llvm/include/llvm/Transforms/IPO/Attributor.h
llvm/lib/Transforms/IPO/Attributor.cpp
llvm/test/Transforms/FunctionAttrs/norecurse.ll
llvm/test/Transforms/FunctionAttrs/willreturn.ll