[LLVMdev] arch-specific predefines in LLVM's source
David Fang
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
>> provided
>> __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)
or
#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
>> conditionals.
>>
>> 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
>> use
>> 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
lib/Support/Host.cpp
Fang
> -Hal
>
>>
>> What would be a suitable place for these proposed macros?
>> include/llvm/Support/Compiler.h?
>> include/llvm/Support/Arch.h (new)?
>>
>> Fang
--
David Fang
http://www.csl.cornell.edu/~fang/
More information about the llvm-dev
mailing list