r251371 - Use early exits to reduce indentation.
Eric Christopher via cfe-commits
cfe-commits at lists.llvm.org
Mon Oct 26 17:12:19 PDT 2015
On Mon, Oct 26, 2015 at 5:11 PM David Blaikie <dblaikie at gmail.com> wrote:
> 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... )
>
That would totally be awesome, except I'm about to refactor that code more.
But I'll keep it in mind and see if I can manage it :)
-eric
>
>
>> }
>>
>> 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/20151027/59493919/attachment-0001.html>
More information about the cfe-commits
mailing list