[LLVMdev] Getting command line options to affect subtarget features

Bill Schmidt wschmidt at linux.vnet.ibm.com
Thu Jan 31 08:17:04 PST 2013



On Thu, 2013-01-31 at 09:42 -0600, Hal Finkel wrote:
> ----- 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");
> }

Perfect, Hal, thanks!  That makes good sense.  I'll fix this and also
bring some of the CPU handling more up-to-date (several missing
processors that ought to be in there).

Thanks,
Bill

> 
> 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