[LLVMdev] arch-specific predefines in LLVM's source
Hal Finkel
hfinkel at anl.gov
Sat Jul 27 20:32:04 PDT 2013
----- Original Message -----
> Hi,
>
> > ----- Original Message -----
> >>> ----- 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__)
> >>>> ...)
> >> 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 thought that you had discovered that on Darwin __ppc__, etc. are
> > defined only for 32-bit builds. Is that correct?
> >
> > -Hal
>
> Ah yes, with apple-gcc-4.0.1 (powerpc)
>
> -m32 only defines __ppc__
> -m64 only defines __ppc64__
>
> So a more correct set of definitions would be:
>
> #define LLVM_PPC32 ((defined(__ppc__) || (defined(__powerpc__) &&
> !defined(__powerpc64__)))
> #define LLVM_PPC64 (defined(__ppc64__) || defined(__powerpc64__))
> #define LLVM_PPC_ANY (LLVM_PPC32 || LLVM_PPC64)
Yep, and the following seems safer still (and slightly cleaner):
#define LLVM_PPC64 (defined(__ppc64__) || defined(__powerpc64__))
#define LLVM_PPC32 ((defined(__ppc__) || (defined(__powerpc__) && !LLVM_PPC64
#define LLVM_PPC_ANY (LLVM_PPC32 || LLVM_PPC64)
As for where to put them, I'm still not quite sure. Support/Compiler.h does seem like the best current fit. If you propose a patch for review, I imagine someone will share an opinion ;)
Thanks again,
Hal
>
> Fang
>
> >>>> 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/
> >>
> >>
> >
> >
>
> --
> David Fang
> http://www.csl.cornell.edu/~fang/
>
>
--
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory
More information about the llvm-dev
mailing list