[LLVMdev] Getting command line options to affect subtarget features

Hal Finkel hfinkel at anl.gov
Thu Jan 31 07:42:54 PST 2013


----- Original Message -----
> From: "Bill Schmidt" <wschmidt at linux.vnet.ibm.com>
> To: llvmdev at cs.uiuc.edu
> Sent: Thursday, January 31, 2013 9:26:15 AM
> Subject: [LLVMdev] Getting command line options to affect subtarget features
> 
> 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
> have:
> 
> 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?

Off of the top of my head...

Within the current infrastructure, I think that we need to alter the Clang PowerPC toolchain code (Clang::AddPPCTargetArgs in Tools.cpp) to do something like this:

if (Args.hasFlag(options::OPT_fno_altivec, options::OPT_faltivec, true)) {
  CmdArgs.push_back("-backend-option");
  CmdArgs.push_back("-mattr=-altivec");
}

Why this not done currently I don't know.

 -Hal

> 
> Thanks!  I appreciate any help.
> 
> Bill
> 
> --
> Bill Schmidt, Ph.D.
> IBM Advance Toolchain for PowerLinux
> IBM Linux Technology Center
> wschmidt at us.ibm.com
> wschmidt at linux.vnet.ibm.com
> 
> 
> 
> 
> 
> 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
> 



More information about the llvm-dev mailing list