error: use of undeclared identifier '__builtin_ia32_addss' while building clang using clang

Hello!
I tried to build clang using clang and i got errors. I'm using gentoo,
gcc-4.4.5, i686. Llvm and clang are from trunk (clang r126559) with
patch witch add path to gcc-4.4.5 headers.
How could i fix this problem?
Thanks!

Error message:
In file included from Lexer.cpp:1520:
In file included from
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/emmintrin.h:36:
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/xmmintrin.h:102:19: error:
use of undeclared identifier '__builtin_ia32_addss'
  return (__m128) __builtin_ia32_addss ((__v4sf)__A, (__v4sf)__B);
                  ^
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/xmmintrin.h:108:19: error:
use of undeclared identifier '__builtin_ia32_subss'
  return (__m128) __builtin_ia32_subss ((__v4sf)__A, (__v4sf)__B);
                  ^
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/xmmintrin.h:114:19: error:
use of undeclared identifier '__builtin_ia32_mulss'
  return (__m128) __builtin_ia32_mulss ((__v4sf)__A, (__v4sf)__B);
                  ^
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/xmmintrin.h:120:19: error:
use of undeclared identifier '__builtin_ia32_divss'; did you mean
      '__builtin_ia32_minss'?
  return (__m128) __builtin_ia32_divss ((__v4sf)__A, (__v4sf)__B);
                  ^~~~~~~~~~~~~~~~~~~~
                  __builtin_ia32_minss
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/xmmintrin.h:114:19: note:
'__builtin_ia32_minss' declared here
  return (__m128) __builtin_ia32_mulss ((__v4sf)__A, (__v4sf)__B);
                  ^
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/xmmintrin.h:158:19: error:
use of undeclared identifier '__builtin_ia32_addps'; did you mean
      '__builtin_ia32_haddps'?
  return (__m128) __builtin_ia32_addps ((__v4sf)__A, (__v4sf)__B);
                  ^~~~~~~~~~~~~~~~~~~~
                  __builtin_ia32_haddps
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/xmmintrin.h:102:19: note:
'__builtin_ia32_haddps' declared here
  return (__m128) __builtin_ia32_addss ((__v4sf)__A, (__v4sf)__B);
                  ^
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/xmmintrin.h:164:19: error:
use of undeclared identifier '__builtin_ia32_subps'; did you mean
      '__builtin_ia32_hsubps'?
  return (__m128) __builtin_ia32_subps ((__v4sf)__A, (__v4sf)__B);
                  ^~~~~~~~~~~~~~~~~~~~
                  __builtin_ia32_hsubps
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/xmmintrin.h:108:19: note:
'__builtin_ia32_hsubps' declared here
  return (__m128) __builtin_ia32_subss ((__v4sf)__A, (__v4sf)__B);
                  ^
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/xmmintrin.h:170:19: error:
use of undeclared identifier '__builtin_ia32_mulps'
  return (__m128) __builtin_ia32_mulps ((__v4sf)__A, (__v4sf)__B);
                  ^
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/xmmintrin.h:176:19: error:
use of undeclared identifier '__builtin_ia32_divps'
  return (__m128) __builtin_ia32_divps ((__v4sf)__A, (__v4sf)__B);
                  ^
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/xmmintrin.h:214:10: error:
use of undeclared identifier '__builtin_ia32_andps'
  return __builtin_ia32_andps (__A, __B);
         ^
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/xmmintrin.h:220:10: error:
use of undeclared identifier '__builtin_ia32_andnps'
  return __builtin_ia32_andnps (__A, __B);
         ^
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/xmmintrin.h:226:10: error:
use of undeclared identifier '__builtin_ia32_orps'; did you mean
      '__builtin_ia32_dpps'?
  return __builtin_ia32_orps (__A, __B);
         ^~~~~~~~~~~~~~~~~~~
         __builtin_ia32_dpps
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/xmmintrin.h:226:10: note:
'__builtin_ia32_dpps' declared here
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/xmmintrin.h:226:39: error:
too few arguments to function call, expected 3, have 2
  return __builtin_ia32_orps (__A, __B);
         ~~~~~~~~~~~~~~~~~~~ ^
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/xmmintrin.h:232:10: error:
use of undeclared identifier '__builtin_ia32_xorps'
  return __builtin_ia32_xorps (__A, __B);
         ^
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/xmmintrin.h:242:19: error:
use of undeclared identifier '__builtin_ia32_cmpeqss'; did you mean
      '__builtin_ia32_cmpss'?
  return (__m128) __builtin_ia32_cmpeqss ((__v4sf)__A, (__v4sf)__B);
                  ^~~~~~~~~~~~~~~~~~~~~~
                  __builtin_ia32_cmpss
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/xmmintrin.h:242:19: note:
'__builtin_ia32_cmpss' declared here
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/xmmintrin.h:242:67: error:
too few arguments to function call, expected 3, have 2
  return (__m128) __builtin_ia32_cmpeqss ((__v4sf)__A, (__v4sf)__B);
                  ~~~~~~~~~~~~~~~~~~~~~~ ^
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/xmmintrin.h:248:19: error:
use of undeclared identifier '__builtin_ia32_cmpltss'; did you mean
      '__builtin_ia32_cmpss'?
  return (__m128) __builtin_ia32_cmpltss ((__v4sf)__A, (__v4sf)__B);
                  ^~~~~~~~~~~~~~~~~~~~~~
                  __builtin_ia32_cmpss
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/xmmintrin.h:242:19: note:
'__builtin_ia32_cmpss' declared here
  return (__m128) __builtin_ia32_cmpeqss ((__v4sf)__A, (__v4sf)__B);
                  ^
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/xmmintrin.h:248:67: error:
too few arguments to function call, expected 3, have 2
  return (__m128) __builtin_ia32_cmpltss ((__v4sf)__A, (__v4sf)__B);
                  ~~~~~~~~~~~~~~~~~~~~~~ ^
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/xmmintrin.h:254:19: error:
use of undeclared identifier '__builtin_ia32_cmpless'
  return (__m128) __builtin_ia32_cmpless ((__v4sf)__A, (__v4sf)__B);
                  ^
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/xmmintrin.h:262:6: error:
use of undeclared identifier '__builtin_ia32_cmpltss'; did you mean
      '__builtin_ia32_cmpss'?
                                        __builtin_ia32_cmpltss ((__v4sf)
__B,
                                        ^~~~~~~~~~~~~~~~~~~~~~
                                        __builtin_ia32_cmpss
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
make[3]: ***
[/var/tmp/portage/sys-devel/clang-9999/work/llvm/tools/clang/lib/Lex/Release/Lexer.o]
Error 1

You say you're trying to build Clang with Clang? How come it's using
GCC's SSE headers instead of Clang's headers? Are you sure you installed
Clang properly? (There should be a <prefix>/lib/clang/2.9/include
directory containing the SSE headers.)

And no, Clang can't use GCC's headers. A bunch of GCC built-ins were
purposefully omitted, because Clang doesn't need them (they're all
internal implementation details of GCC's SSE headers).

Chip

Hi Marcin,

This is a common problem, check out this section and the attached script:
http://clang.llvm.org/compatibility.html#vector_builtins

-Chris

W dniu 2011-02-27 02:31, Charles Davis pisze:

You say you're trying to build Clang with Clang? How come it's using
GCC's SSE headers instead of Clang's headers?

When i try to use "vanilla" sources i got:
In file included from
/var/tmp/portage/sys-devel/clang-9999/work/llvm/include/llvm/Support/SwapByteOrder.h:18:
/var/tmp/portage/sys-devel/clang-9999/work/llvm/include/llvm/Support/DataTypes.h:35:10:
fatal error: 'cmath' file not found
#include <cmath>

To solve this error i added this section:
+ // Gentoo x86 gcc 4.4.5
+ AddGnuCPlusPlusIncludePaths(
+ "/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/g++-v4",
+ "i686-pc-linux-gnu", "", "", triple);

to InitHeaderSearch.cpp .
Next i've got error:
In file included from Signals.cpp:30:
/var/tmp/portage/sys-devel/clang-9999/work/llvm/lib/Support/Unix/Signals.inc:31:10:
fatal error: 'cxxabi.h' file not found
#include <cxxabi.h>

I found file cxxabi.h in dir:
/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/ so... i added:
AddGnuCPlusPlusIncludePaths(
      "/usr/lib/gcc/i686-pc-linux-gnu/4.4.5/include/",
      "i686-pc-linux-gnu", "", "", triple);

Probably this solved one problem and created another one.

Are you sure you installed
Clang properly? (There should be a <prefix>/lib/clang/2.9/include
directory containing the SSE headers.)

Yes, i've got this headers in directory: /usr/lib/clang/2.9/include/
(files *mmintrin.h exists there)

And no, Clang can't use GCC's headers. A bunch of GCC built-ins were
purposefully omitted, because Clang doesn't need them (they're all
internal implementation details of GCC's SSE headers).

I'm guessing that proper solution is to make clang searching headers
first in own dir ( /usr/lib/clang/2.9/include/ ) and next in gcc path.
Do i think correctly? Or maybe there is much easiest way how to fix
problem with cxxabi.h file?
Thanks for reply.

Hi Marcin,

Ok, then I'd suggest working with the upstream project to get them to update their code. We are not planning to add these builtins to clang, and will continue to remove the remaining ones when possible.

-Chris

Uh, the "other package" he's talking about is GCC. Good luck with that.

I still think you need to make Clang use its internal headers instead of
GCC's internal headers. That was the original problem here. You should
probably get rid of the -I parameter adding GCC's internal headers to
Clang's search path. If that doesn't work, put it back, then try adding
a '-I/usr/lib/clang/2.9/include' to the command line.

Chip