Flags -auto and -auto-all operate only on functions not marked INLINE.
authorMilan Straka <fox@ucw.cz>
Wed, 31 Mar 2010 19:10:50 +0000 (19:10 +0000)
committerMilan Straka <fox@ucw.cz>
Wed, 31 Mar 2010 19:10:50 +0000 (19:10 +0000)
compiler/deSugar/DsBinds.lhs
docs/users_guide/flags.xml
docs/users_guide/profiling.xml

index cc7ecfd..797d55e 100644 (file)
@@ -633,6 +633,7 @@ See Note [Rules for seq] in MkId for the details.
 data AutoScc = NoSccs 
             | AddSccs Module (Id -> Bool)
 -- The (Id->Bool) says which Ids to add SCCs to 
+-- But we never add a SCC to function marked INLINE
 
 addAutoScc :: AutoScc  
           -> Id        -- Binder
@@ -641,6 +642,8 @@ addAutoScc :: AutoScc
 
 addAutoScc NoSccs _ rhs
   = rhs
+addAutoScc _ id rhs | isInlinePragma (idInlinePragma id)
+  = rhs
 addAutoScc (AddSccs mod add_scc) id rhs
   | add_scc id = mkSCC (mkAutoCC id mod NotCafCC) rhs
   | otherwise  = rhs
index e7c237b..1aec575 100644 (file)
@@ -1543,14 +1543,14 @@ phase <replaceable>n</replaceable></entry>
            <row>
              <entry><option>-auto</option></entry>
              <entry>Auto-add <literal>_scc_</literal>s to all
-             exported functions</entry>
+             exported functions not marked INLINE</entry>
              <entry>dynamic</entry>
              <entry><option>-no-auto</option></entry>
            </row>
            <row>
              <entry><option>-auto-all</option></entry>
              <entry>Auto-add <literal>_scc_</literal>s to all
-             top-level functions</entry>
+             top-level functions not marked INLINE</entry>
              <entry>dynamic</entry>
              <entry><option>-no-auto-all</option></entry>
            </row>
index 5fb53d0..fe835af 100644 (file)
@@ -249,8 +249,8 @@ MAIN                     MAIN             0    0.0   0.0    100.0 100.0
       <para>Cost centres are just program annotations.  When you say
       <option>-auto-all</option> to the compiler, it automatically
       inserts a cost centre annotation around every top-level function
-      in your program, but you are entirely free to add the cost
-      centre annotations yourself.</para>
+      not marked INLINE in your program, but you are entirely free to
+      add the cost centre annotations yourself.</para>
 
       <para>The syntax of a cost centre annotation is</para>
 
@@ -401,7 +401,9 @@ x = nfib 25
        <listitem>
          <para> GHC will automatically add
           <function>&lowbar;scc&lowbar;</function> constructs for all
-          top-level, exported functions.</para>
+          top-level, exported functions not marked INLINE. If you
+          want a cost centre on an INLINE function, you have to add
+          it manually.</para>
        </listitem>
       </varlistentry>
       
@@ -411,9 +413,11 @@ x = nfib 25
           <indexterm><primary><option>-auto-all</option></primary></indexterm>
         </term>
        <listitem>
-         <para> <emphasis>All</emphasis> top-level functions,
-         exported or not, will be automatically
-         <function>&lowbar;scc&lowbar;</function>'d.</para>
+          <para> <emphasis>All</emphasis> top-level functions
+          not marked INLINE, exported or not, will be automatically
+          <function>&lowbar;scc&lowbar;</function>'d.
+          The functions marked INLINE must be given a cost centre
+          manually.</para>
        </listitem>
       </varlistentry>