Author: Roman Lebedev Date: 2021-03-21T23:24:27+03:00 New Revision: be8732128029530a0b8671af3a47ce6085039fa2
URL: https://github.com/llvm/llvm-project/commit/be8732128029530a0b8671af3a47ce6085039fa2 DIFF: https://github.com/llvm/llvm-project/commit/be8732128029530a0b8671af3a47ce6085039fa2.diff LOG: [clang][Codegen] EmitBranchOnBoolExpr(): emit prof branch counts even at -O0 This restores the original behaviour before i unadvertedly broke it in e3a470162738871bba982416748ae5f5e3572947 and clang/test/Profile/ caught it. Added: Modified: clang/lib/CodeGen/CodeGenFunction.cpp Removed: ################################################################################ diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp b/clang/lib/CodeGen/CodeGenFunction.cpp index 1c538262737d..fd708849e609 100644 --- a/clang/lib/CodeGen/CodeGenFunction.cpp +++ b/clang/lib/CodeGen/CodeGenFunction.cpp @@ -1774,27 +1774,27 @@ void CodeGenFunction::EmitBranchOnBoolExpr(const Expr *Cond, llvm::MDNode *Weights = nullptr; llvm::MDNode *Unpredictable = nullptr; - // If optimizing, lower unpredictability/probability knowledge about cond. - if (CGM.getCodeGenOpts().OptimizationLevel != 0) { - // If the branch has a condition wrapped by __builtin_unpredictable, - // create metadata that specifies that the branch is unpredictable. - if (auto *Call = dyn_cast<CallExpr>(Cond->IgnoreImpCasts())) { - auto *FD = dyn_cast_or_null<FunctionDecl>(Call->getCalleeDecl()); - if (FD && FD->getBuiltinID() == Builtin::BI__builtin_unpredictable) { - llvm::MDBuilder MDHelper(getLLVMContext()); - Unpredictable = MDHelper.createUnpredictable(); - } + // If the branch has a condition wrapped by __builtin_unpredictable, + // create metadata that specifies that the branch is unpredictable. + // Don't bother if not optimizing because that metadata would not be used. + auto *Call = dyn_cast<CallExpr>(Cond->IgnoreImpCasts()); + if (Call && CGM.getCodeGenOpts().OptimizationLevel != 0) { + auto *FD = dyn_cast_or_null<FunctionDecl>(Call->getCalleeDecl()); + if (FD && FD->getBuiltinID() == Builtin::BI__builtin_unpredictable) { + llvm::MDBuilder MDHelper(getLLVMContext()); + Unpredictable = MDHelper.createUnpredictable(); } + } - // If there is a Likelihood knowledge for the cond, lower it. - llvm::Value *NewCondV = emitCondLikelihoodViaExpectIntrinsic(CondV, LH); - if (CondV != NewCondV) - CondV = NewCondV; - else { - // Otherwise, lower profile counts. - uint64_t CurrentCount = std::max(getCurrentProfileCount(), TrueCount); - Weights = createProfileWeights(TrueCount, CurrentCount - TrueCount); - } + // If there is a Likelihood knowledge for the cond, lower it. + // Note that if not optimizing this won't emit anything. + llvm::Value *NewCondV = emitCondLikelihoodViaExpectIntrinsic(CondV, LH); + if (CondV != NewCondV) + CondV = NewCondV; + else { + // Otherwise, lower profile counts. Note that we do this even at -O0. + uint64_t CurrentCount = std::max(getCurrentProfileCount(), TrueCount); + Weights = createProfileWeights(TrueCount, CurrentCount - TrueCount); } Builder.CreateCondBr(CondV, TrueBlock, FalseBlock, Weights, Unpredictable); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits