Question

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

Était-ce utile?

La solution

It's happens becuse of in gcc 4.7 we have special check (check for TARGET_C99_FUNCTIONS) in builins.def file, 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 glibc then we don't have cbrt function. So we cant transform pow to cbrt and it's the root cause.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top