Keeping Clang from changing function calls to IR operations: cmpxchg

I’m working on getting the LLVM/projects/Test-Suite/UnitTest to compile for a target that I am developing.

There is an example: AtomicOps, that uses calls to:


These get converted into llvm IR operations like:


Is there any way to keep these as function calls, as they are easier to map to the target’s eventual functional then having to deal with atomicrmw and cmpxchg

I’m not sure if this will do everything that you want, but it controls at least some of these expansions at the Clang level:


It looks like Ubuntu 13.04 has changed the include files directories structure
Now we get the following error in many of our programs
that compile fine on Ubuntu 12.04

clang++ -c -x c++ -emit-llvm ../../libsimsoc/processors/ppc/ppc_llvm_lib.cpp -DNDEBUG -I/home/vania/systemc-2.3.0/include -I/home/vania/tlm2.0/include/tlm -DSC_INCLUDE_DYNAMIC_PROCESSES -I/usr/local/llvm/3.2/include -DNDEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I../.. -I.. -DABS_TOP_SRCDIR="\"/home/vania/simsoc/trunk/build/..\"" -DABS_TOP_BUILDDIR="\"/home/vania/simsoc/trunk/build\"" -DBINDIR="\"/usr/local/bin\"" -I ../libsimsoc -DNDEBUG -O3 -o ppc_llvm_lib.bc
In file included from ../../libsimsoc/processors/ppc/ppc_llvm_lib.cpp:7:
In file included from ../../libsimsoc/bitwise_operator.hpp:11:
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/vector:60:
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/stl_algobase.h:60:10: fatal error:
      'bits/c++config.h' file not found
#include <bits/c++config.h>
1 error generated.

It happens systematically when including a header file from STL (in this case vector)
that includes <bits/c++config.h>
It may be a problem more related to Ubuntu 13, but it seems a general
change in Linux architecture dependent includes.
They have migrated architecture dependent files from


In my case ARCHITECTURE=x86_64-linux-gnu

Is this something we have to definitely deal with in our configure script
or we can expect a clang++ change ?


Clang 3.3 includes a fix to support Ubuntu 13.04.