Hi i have some problems with optimization.
I tried to compile one of gcc test with builtin functions:
#include <stdio.h>
#ifdef HAVE_C99_RUNTIME
double test1 (double x)
{
return __builtin_pow (x, 1/3);
}
double test2 (double x)
{
return __builtin_pow (x, 4./3.);
}
double test3a (double x)
{
return __builtin_pow (x, 5./3.);
}
double test3b (double x)
{
return __builtin_pow (x, -5./3.);
}
double test4 (double x)
{
return __builtin_pow (x, 7./3.);
}
#endif
I tried to compile it with next 2 ways:
1 way:
gcc -mglibc -O -ffast-math -std=c99 -fno-ident -S -o builtins-58.s
And in output assembler file all call pow was changed to call cbrt – its expected
2 way:
gcc -mbionic -O -ffast-math -std=c99 -fno-ident -S -o builtins-58.s
With using -mbionic instead of-mglibc i got output with call pow
Does anybody know how optmimization for builtin functions works in Bionic
It’s happens becuse of in gcc 4.7 we have special check (check for
TARGET_C99_FUNCTIONS)in
builins.deffile, where is defined all builtin function.And in another file we have:
define TARGET_C99_FUNCTIONS (OPTION_GLIBC)These check checks library, and if there no
glibcthen we don’t havecbrtfunction.So we cant transform
powtocbrtand it’s the root cause.