how to avoid default inlining of static functions at O3 ?

john fromu2john@yahoo.com
Fri Sep 26 19:00:00 GMT 2008


Hi,
     I am using gcc 3.4.6 (gcc version 3.4.6 20060404 (Red Hat 3.4.6-3)) and trying a simple C program which was given at the end of this mail along with its assembly code. 

I am compiling the program using -O3

/usr/bin/gcc  -c -pipe -m32 -D_REENTRANT -fPIC -W -Wall -Wextra -O -O3 -DSERVER -DMONITORS -DHA_KEY='"NONE"' test.c -S -o test.s

I see that at optimization level O3, the compiler is defaultly inlining my static functions. Is there a way to avoid inlining static functions for C programs ?


-fno-inline may avoid inlining all functions. There is -fno-default-inline, but that is for C++.

Thanks for any help in advance,
Regards
--John



#include<stdio.h>
void test(int a, int b, int c)
{
        int d;
        d=a*b*c;
        printf("%d * %d * %d is %d\n",a,b,c,d);
}



static void test2(int a, int b, int c)
{
         int d;
         d=a+b+c;
         printf("%d + %d + %d is %d\n",a,b,c,d);
}

int main(int argc, char *argv[])
{
        test(1,2,3);
        test2(4,5,6);
}



        .file   "test.c"
        .section        .rodata.str1.1,"aMS",@
progbits,1
..LC0:
        .string "%d * %d * %d is %d\n"
        .text
        .p2align 2,,3
..globl test
        .type   test, @function
test:
        pushl   %ebp
        movl    %esp, %ebp
        pushl   %esi
        movl    8(%ebp), %esi
        movl    12(%ebp), %ecx
        movl    %esi, %eax
        pushl   %ebx
        movl    16(%ebp), %edx
        imull   %ecx, %eax
        subl    $12, %esp
        imull   %edx, %eax
        pushl   %eax
        pushl   %edx
        pushl   %ecx
        call    .L2
..L2:
        popl    %ebx
        addl    $_GLOBAL_OFFSET_TABLE_+[.-.L2] , %ebx
        pushl   %esi
        leal    .LC0@GOTOFF(%ebx), %eax
        pushl   %eax
        call    printf@PLT
        leal    -8(%ebp), %esp
        popl    %ebx
        popl    %esi
        leave
        ret
        .size   test, .-test
        .section        .rodata.str1.1
..LC1:
        .string "%d + %d + %d is %d\n"
        .text
        .p2align 2,,3
..globl main
        .type   main, @function
main:
        pushl   %ebp
        movl    %esp, %ebp
        pushl   %ebx
        pushl   %eax
        andl    $-16, %esp
        subl    $20, %esp
        pushl   $3
        pushl   $2
        pushl   $1
        call    .L5
..L5:
        popl    %ebx
        addl    $_GLOBAL_OFFSET_TABLE_+[.-.L5] , %ebx
        call    test@PLT
        movl    $15, (%esp)
        pushl   $6
        pushl   $5
        pushl   $4
        leal    .LC1@GOTOFF(%ebx), %eax
        pushl   %eax
        call    printf@PLT
        addl    $32, %esp
        movl    -4(%ebp), %ebx
        leave
        ret
        .size   main, .-main
        .section        .note.GNU-stack,"",@progbits
        .ident  "GCC: (GNU) 3.4.6 20060404 (Red Hat 3.4.6-3)"


      Unlimited freedom, unlimited storage. Get it now, on http://help.yahoo.com/l/in/yahoo/mail/yahoomail/tools/tools-08.html/



More information about the Gcc-help mailing list