[LLVMdev] Getting command line options to affect subtarget features

Bill Schmidt wschmidt at linux.vnet.ibm.com
Thu Jan 31 07:26:15 PST 2013

The problem I'm trying to solve:  Invoking clang on PowerPC with
-fno-altivec has no effect.

>From what I've been able to piece together, PPC.td specifies various
CPUs and the processor features available on each.  So for example we

def FeatureAltivec   : SubtargetFeature<"altivec","HasAltivec", "true",
                                        "Enable Altivec instructions">;

def : Processor<"pwr7", G5Itineraries,
                  [DirectivePwr7, FeatureAltivec,
                   FeatureMFOCRF, FeatureFSqrt, FeatureSTFIWX,
                   FeatureISEL, Feature64Bit /*, Feature64BitRegs */]>;

During compilation the subtarget class (such as PPCSubtarget) is
instantiated with the strings obtained from -mcpu and -mattr.
ParseSubtargetFeatures then uses the -mcpu and -mattr values to
determine which features to use for code generation.

What seems problematic is that -mattr is the only way that the static
features of the target processor can be overridden.

It seems there must be a way for command-line parameters such as
-fno-altivec to be used to override which processor features are
exploited.  But I can't see immediately how this should work.  I don't
know whether or how the command line flags from Clang are made available
to LLVM for inspection.

I'm sure there must be an obvious way to do this, but peeking at code
from other targets hasn't enlightened me.  Any advice for how I can
accomplish this?

Thanks!  I appreciate any help.


Bill Schmidt, Ph.D.
IBM Advance Toolchain for PowerLinux
IBM Linux Technology Center
wschmidt at us.ibm.com
wschmidt at linux.vnet.ibm.com

More information about the llvm-dev mailing list