[llvm-dev] enable a disabled target feature through clang

Rail Shafigulin via llvm-dev llvm-dev at lists.llvm.org
Wed Jun 8 14:06:59 PDT 2016


My target has multiple flavors which implemented as features.

Having a hardware divider is an example of a feature. It is implemented in
Escala.td as

def FeatureDiv   : SubtargetFeature<"div", "HasDiv", "true",
                                   "Enable hardware divider">;

def : Proc<"escala", EscalaModel, [
                                     FeatureDiv
                                    ]>;

I've added a an extra option to void Clang::AddEscalaTargetArgs(...) in
clang/lib/Driver/Tools.cpp to handle enabling/disabling of this feature

  if (Arg *A = Args.getLastArg(options::OPT_mhard_div,
                               options::OPT_msoft_div)) {
    CmdArgs.push_back("-target-feature");
    if (A->getOption().matches(options::OPT_mhard_div))
      CmdArgs.push_back("+div");
    else
      CmdArgs.push_back("-div");
  }

My expectation is that if I use -mhard-div the feature would be enabled and
-msoft-div, it would be disabled. However I observed the following behavior.

If the feature is enabled (set to true) in Escala.td, ie.

def FeatureDiv   : SubtargetFeature<"div", "HasDiv", "true",
                                   "Enable hardware divider">;

then -mhard-div has no effect and -msoft-div disables the divider.

If the feature is disabled (set to false) in Escala.td, i.e.
def FeatureDiv   : SubtargetFeature<"div", "HasDiv", "false",
                                   "Enable hardware divider">;

then -mhard-div and -msoft-div have no effect. The compiler will
automatically make an assumption to use a soft divider.

Here are my questions:

1. Is this the intended behavior?
2. If isn't then how do I enable a disabled feature through a command line?
In other words if a feature is disabled (set to false) in .td file, is it
possible to enable it? For my specific case, if

def FeatureDiv   : SubtargetFeature<"div", "HasDiv", "false", // note
"'false"
                                   "Enable hardware divider">;

is it possible to enable it through a command line?

-- 
Rail Shafigulin
Software Engineer
Esencia Technologies
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160608/77a48268/attachment-0001.html>


More information about the llvm-dev mailing list