r251371 - Use early exits to reduce indentation.

David Blaikie via cfe-commits cfe-commits at lists.llvm.org
Mon Oct 26 17:11:11 PDT 2015


On Mon, Oct 26, 2015 at 5:06 PM, Eric Christopher via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

> Author: echristo
> Date: Mon Oct 26 19:06:21 2015
> New Revision: 251371
>
> URL: http://llvm.org/viewvc/llvm-project?rev=251371&view=rev
> Log:
> Use early exits to reduce indentation.
>
> Modified:
>     cfe/trunk/lib/CodeGen/CGBuiltin.cpp
>
> Modified: cfe/trunk/lib/CodeGen/CGBuiltin.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBuiltin.cpp?rev=251371&r1=251370&r2=251371&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGBuiltin.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGBuiltin.cpp Mon Oct 26 19:06:21 2015
> @@ -296,53 +296,55 @@ bool CodeGenFunction::checkBuiltinTarget
>    if (!TargetDecl)
>      return true;
>
> -  // Get the current enclosing function if it exists.
> -  if (const FunctionDecl *FD =
> dyn_cast_or_null<FunctionDecl>(CurFuncDecl)) {
> -    unsigned BuiltinID = TargetDecl->getBuiltinID();
> -    const char *FeatureList =
> -        CGM.getContext().BuiltinInfo.getRequiredFeatures(BuiltinID);
> -    if (FeatureList && StringRef(FeatureList) != "") {
> -      StringRef TargetCPU = Target.getTargetOpts().CPU;
> -      llvm::StringMap<bool> FeatureMap;
> -
> -      if (const auto *TD = FD->getAttr<TargetAttr>()) {
> -        // If we have a TargetAttr build up the feature map based on that.
> -        TargetAttr::ParsedTargetAttr ParsedAttr = TD->parse();
> -
> -        // Make a copy of the features as passed on the command line into
> the
> -        // beginning of the additional features from the function to
> override.
> -        ParsedAttr.first.insert(
> -            ParsedAttr.first.begin(),
> -            Target.getTargetOpts().FeaturesAsWritten.begin(),
> -            Target.getTargetOpts().FeaturesAsWritten.end());
> -
> -        if (ParsedAttr.second != "")
> -          TargetCPU = ParsedAttr.second;
> -
> -        // Now populate the feature map, first with the TargetCPU which is
> -        // either
> -        // the default or a new one from the target attribute string.
> Then we'll
> -        // use the passed in features (FeaturesAsWritten) along with the
> new
> -        // ones
> -        // from the attribute.
> -        Target.initFeatureMap(FeatureMap, CGM.getDiags(), TargetCPU,
> -                              ParsedAttr.first);
> -      } else {
> -        Target.initFeatureMap(FeatureMap, CGM.getDiags(), TargetCPU,
> -                              Target.getTargetOpts().Features);
> -      }
> -
> -      // If we have at least one of the features in the feature list
> return
> -      // true, otherwise return false.
> -      SmallVector<StringRef, 1> AttrFeatures;
> -      StringRef(FeatureList).split(AttrFeatures, ",");
> -      for (const auto &Feature : AttrFeatures)
> -        if (FeatureMap[Feature])
> -         return true;
> -      return false;
> -    }
> +  // Get the current enclosing function if it exists. If it doesn't
> +  // we can't check the target features anyhow.
> +  const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(CurFuncDecl);
> +  if (!FD) return true;
> +
> +  unsigned BuiltinID = TargetDecl->getBuiltinID();
> +  const char *FeatureList =
> +      CGM.getContext().BuiltinInfo.getRequiredFeatures(BuiltinID);
> +
> +  if (!FeatureList || StringRef(FeatureList) == "")
> +    return true;
> +
> +  StringRef TargetCPU = Target.getTargetOpts().CPU;
> +  llvm::StringMap<bool> FeatureMap;
> +
> +  if (const auto *TD = FD->getAttr<TargetAttr>()) {
> +    // If we have a TargetAttr build up the feature map based on that.
> +    TargetAttr::ParsedTargetAttr ParsedAttr = TD->parse();
> +
> +    // Make a copy of the features as passed on the command line into the
> +    // beginning of the additional features from the function to override.
> +    ParsedAttr.first.insert(ParsedAttr.first.begin(),
> +
> Target.getTargetOpts().FeaturesAsWritten.begin(),
> +
> Target.getTargetOpts().FeaturesAsWritten.end());
> +
> +    if (ParsedAttr.second != "")
> +      TargetCPU = ParsedAttr.second;
> +
> +    // Now populate the feature map, first with the TargetCPU which is
> +    // either
> +    // the default or a new one from the target attribute string. Then
> we'll
> +    // use the passed in features (FeaturesAsWritten) along with the new
> +    // ones
> +    // from the attribute.
> +    Target.initFeatureMap(FeatureMap, CGM.getDiags(), TargetCPU,
> +                          ParsedAttr.first);
> +  } else {
> +    Target.initFeatureMap(FeatureMap, CGM.getDiags(), TargetCPU,
> +                          Target.getTargetOpts().Features);
>    }
> -  return true;
> +
> +  // If we have at least one of the features in the feature list return
> +  // true, otherwise return false.
> +  SmallVector<StringRef, 1> AttrFeatures;
> +  StringRef(FeatureList).split(AttrFeatures, ",");
> +  for (const auto &Feature : AttrFeatures)
> +    if (FeatureMap[Feature])
> +      return true;
> +  return false;
>

This last bit could be written as:

return std::any_of(AttrFeatures.begin(), AttrFeatures.end(), [&](mumble
&Feature) { return FeatureMap[Feature]; });

if you like/if that seems better.

(also, I wouldn't mind if people start writing llvm versions of the
standard algorithms that take a range instead of a begin/end iterator pair
either... )


>  }
>
>  RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD,
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20151026/5090a5a0/attachment.html>


More information about the cfe-commits mailing list