[LLVMdev] arch-specific predefines in LLVM's source
fang at csl.cornell.edu
Fri Jul 26 14:21:00 PDT 2013
> ----- Original Message -----
>> Hi all,
>> My recent commit r187027 fixed a simple oversight of forgetting to
>> check for __ppc__ (only checking __powerpc__), which broke my
>> powerpc-apple-darwin8 stage1 tests, since the system gcc only
>> __ppc__. I was wondering if this justifies using simpler macros like
>> #define LLVM_PPC (defined(__ppc__) || defined(__powerpc__) ...)
>> #define LLVM_PPC64 (defined(__ppc64__) || defined(__powerpc64__) ...)
> A general note: Given all of the compiler variance out there regarding whether the 32-bit macros are also defined on the 64-bit systems, I really think that you'll need to arrange these as:
> #define LLVM_PPC64 (defined(__ppc64__) || defined(__powerpc64__) ...)
> #define LLVM_PPC !LLVM_PPC64 && (defined(__ppc__) || defined(__powerpc__) ...)
or define more clearly:
#define LLVM_PPC32 (((defined(__ppc__) || defined(__powerpc__)) && !LLVM_PPC64)
#define LLVM_PPC_ANY (LLVM_PPC32 || LLVM_PPC64)
#define LLVM_PPC_ANY (defined(__ppc__) || defined(__powerpc__))
#define LLVM_PPC32 (LLVM_PPC_ANY && !LLVM_PPC64)
>> I've even seen __POWERPC__, _POWER, _ARCH_PPC being tested in
>> These proposed standardized macros would only be used in LLVM project
>> sources; there's no reason to exported them.
>> The standardized macros would simplify conditionals and make their
>> less error-prone.
>> What predefines do other architectures use?
> Would all uses of these macros be restricted to the PPC backend, or
> would they appear elsewhere as well?
One place I see these predefines outside of the PPC backend is
>> What would be a suitable place for these proposed macros?
>> include/llvm/Support/Arch.h (new)?
More information about the llvm-dev