Summary:
This threshold limited FunctionAttrs ability to prove arguments to be read-only.
In NVPTX, a specialized instruction ld.global.nc can be used to load memory
with non-coherent texture cache. We notice that in SHOC [1] benchmark, some
function arguments are not marked with readonly because FunctionAttrs reaches
a hardcoded threshold when analysis uses.
Removing this threshold won't cause significant regression in compilation time, because the worst-case time complexity of the algorithm is still O(# of instructions) for each parameter.
Patched by Xuetian Weng.
[1] https://github.com/vetter/shoc
Reviewers: nlewycky, jingyue, nicholas
Subscribers: nicholas, test, llvm-commits
Differential Revision: http://reviews.llvm.org/D11311
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243141
91177308-0d34-0410-b5e6-
96231b3b80d8
// We don't need to track IsWritten. If A is written to, return immediately.
for (Use &U : A->uses()) {
- if (Count++ >= 20)
- return Attribute::None;
-
Visited.insert(&U);
Worklist.push_back(&U);
}