[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