#include <stdio.h>
int addition(int x,int y){ return x+y; }
int main(void){
int a,b,c;
printf("Donnez 3 entiers\n");
scanf("%d %d %d",&a,&b,&c);
printf("%d\n",addition(a,addition(b,c)));
return 0;
}
$ gcc -Wall -O2 --dump-tree-einline --dump-tree-optimized \
substitution.c -o substitution
$ cat substitution.c.026t.einline2
main ()
{
int D.1794,D.1793,D.1793,D.1790,D.1789,D.1789,D.1783,D.1782,D.1780;
int a,b,c,a.13,b.12,c.11;
<bb 2>:
__builtin_puts (&"Donnez 3 entiers"[0]);
scanf (&"%d %d %d"[0], &a, &b, &c);
c.11_1 = c;
b.12_2 = b;
D.1790_8 = c.11_1 + b.12_2;
D.1789_10 = D.1790_8;
D.1780_3 = D.1789_10;
a.13_4 = a;
D.1794_9 = D.1780_3 + a.13_4;
D.1793_11 = D.1794_9;
D.1782_5 = D.1793_11;
printf (&"%d\n"[0], D.1782_5);
D.1783_6 = 0;
return D.1783_6;
}
$ cat substitution.c.126t.optimized
main ()
{
int a,b,c;
<bb 2>:
__builtin_puts (&"Donnez 3 entiers"[0]);
scanf (&"%d %d %d"[0], &a, &b, &c);
printf (&"%d\n"[0], (b + c) + a);
return 0;
}
#include <stdio.h>
#define TAILLE 10
int main(void){
int a[TAILLE];
int resultat=0;
int i;
for(i=0;i<TAILLE;i++) scanf("%d",&a[i]);
for(i=0;i<TAILLE;i++) resultat += a[i];
return resultat;
}
$ gcc -Wall -O3 --dump-tree-cunroll --dump-tree-optimized \
deroulement.c -o deroulement
$ cat deroulement.c.126t.optimized
main ()
{
int resultat.48;
int resultat.46;
int resultat.44;
int resultat.42;
int resultat.40;
int resultat.38;
int resultat.36;
int resultat.34;
int a[10];
<bb 2>:
scanf (&"%d"[0], &a);
scanf (&"%d"[0], &a[1]);
scanf (&"%d"[0], &a[2]);
scanf (&"%d"[0], &a[3]);
scanf (&"%d"[0], &a[4]);
scanf (&"%d"[0], &a[5]);
scanf (&"%d"[0], &a[6]);
scanf (&"%d"[0], &a[7]);
scanf (&"%d"[0], &a[8]);
scanf (&"%d"[0], &a[9]);
resultat.34 = a[0] + a[1];
resultat.36 = resultat.34 + a[2];
resultat.38 = resultat.36 + a[3];
resultat.40 = resultat.38 + a[4];
resultat.42 = resultat.40 + a[5];
resultat.44 = resultat.42 + a[6];
resultat.46 = resultat.44 + a[7];
resultat.48 = resultat.46 + a[8];
return a[9] + resultat.48;
}
#include <stdio.h>
int puissance(int a,int b){
if(b==0) return 1;
else return puissance(a,b-1)*a;
}
int main(void){
int a,b;
scanf("%d %d",&a,&b);
printf("%d\n",puissance(a,b));
return 0;
}
$ gcc -Wall -O2 --dump-tree-optimized recursion.c -o recursion
$ cat recursion.c.126t.optimized
puissance (a, b)
{
int mult_acc.13;
<bb 2>:
if (b == 0) goto <bb 6>; else goto <bb 5>;
<bb 6>:
mult_acc.13 = 1;
goto <bb 4>;
<bb 5>:
mult_acc.13 = 1;
<bb 3>:
b = b + -1;
mult_acc.13 = mult_acc.13 * a;
if (b == 0) goto <bb 4>; else goto <bb 3>;
<bb 4>:
return mult_acc.13;
}