This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
how to avoid default inlining of static functions at O3 ?
- From: john <fromu2john at yahoo dot com>
- To: gcc-help at gcc dot gnu dot org
- Date: Sat, 27 Sep 2008 00:29:12 +0530 (IST)
- Subject: how to avoid default inlining of static functions at O3 ?
- Reply-to: fromu2john at yahoo dot com
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/