On Mon, Oct 26, 2015 at 5:11 PM David Blaikie <dblai...@gmail.com> wrote:
> On Mon, Oct 26, 2015 at 5:06 PM, Eric Christopher via cfe-commits < > cfe-commits@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@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits