[attrs] Extract the pure inference of function attributes into
authorChandler Carruth <chandlerc@gmail.com>
Sun, 27 Dec 2015 08:41:34 +0000 (08:41 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Sun, 27 Dec 2015 08:41:34 +0000 (08:41 +0000)
commitd97964253ec08dcac9048e7643fd19e3d16831d5
treef79f377e9c7342ff2bdb7c27803602516bec27c5
parent6a1ce8ecd6ad14e945ddab147397d44ff0a1002c
[attrs] Extract the pure inference of function attributes into
a standalone pass.

There is no call graph or even interesting analysis for this part of
function attributes -- it is literally inferring attributes based on the
target library identification. As such, we can do it using a much
simpler module pass that just walks the declarations. This can also
happen much earlier in the pass pipeline which has benefits for any
number of other passes.

In the process, I've cleaned up one particular aspect of the logic which
was necessary in order to separate the two passes cleanly. It now counts
inferred attributes independently rather than just counting all the
inferred attributes as one, and the counts are more clearly explained.

The two test cases we had for this code path are both ... woefully
inadequate and copies of each other. I've kept the superset test and
updated it. We need more testing here, but I had to pick somewhere to
stop fixing everything broken I saw here.

Differential Revision: http://reviews.llvm.org/D15676

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@256466 91177308-0d34-0410-b5e6-96231b3b80d8
13 files changed:
include/llvm/InitializePasses.h
include/llvm/Transforms/IPO/InferFunctionAttrs.h [new file with mode: 0644]
lib/Passes/PassBuilder.cpp
lib/Passes/PassRegistry.def
lib/Transforms/IPO/CMakeLists.txt
lib/Transforms/IPO/FunctionAttrs.cpp
lib/Transforms/IPO/IPO.cpp
lib/Transforms/IPO/InferFunctionAttrs.cpp [new file with mode: 0644]
lib/Transforms/IPO/PassManagerBuilder.cpp
test/Transforms/FunctionAttrs/2009-01-04-Annotate.ll [deleted file]
test/Transforms/FunctionAttrs/annotate-1.ll [deleted file]
test/Transforms/InferFunctionAttrs/annotate.ll [new file with mode: 0644]
test/Transforms/InstCombine/strto-1.ll