Run the functionattrs pass after the inliner, and not before.
authorDuncan Sands <baldrick@free.fr>
Tue, 3 Nov 2009 09:40:08 +0000 (09:40 +0000)
committerDuncan Sands <baldrick@free.fr>
Tue, 3 Nov 2009 09:40:08 +0000 (09:40 +0000)
commit674fdc9a289c56edeb799bf5a8d4668f7e22bf73
tree0e89e866838e44d7d5fc19fa35c80bc6faed1068
parent8fd64a5e27bba6f8d1b87682beb6639d1223556d
Run the functionattrs pass after the inliner, and not before.
This makes both logical sense (see below) and increases the
number of functions marked readnone/readonly by about 1-2%
in practice.  The number of functions marked nocapture goes
up by about 5-10%.  The reason it makes sense is shown by
the following example: if you run -functionattrs -inline on
it, then no attributes are assigned.  But if you instead run
-inline -functionattrs then @f is marked readnone because the
simplifications produced by the inliner eliminate the store.

@x = external global i32

define void @w(i1 %b) {
        br i1 %b, label %write, label %return
write:
        store i32 1, i32 *@x
        br label %return
return:
        ret void
}

define void @f() {
        call void @w(i1 0)
        ret void
}

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85893 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/Support/StandardPasses.h