[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