diff options
Diffstat (limited to 'clang/lib/CodeGen/CGExprScalar.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGExprScalar.cpp | 40 |
1 files changed, 14 insertions, 26 deletions
diff --git a/clang/lib/CodeGen/CGExprScalar.cpp b/clang/lib/CodeGen/CGExprScalar.cpp index df85042..37b3297 100644 --- a/clang/lib/CodeGen/CGExprScalar.cpp +++ b/clang/lib/CodeGen/CGExprScalar.cpp @@ -4990,11 +4990,9 @@ Value *ScalarExprEmitter::VisitBinLAnd(const BinaryOperator *E) { CGF.incrementProfileCounter(E); // If the top of the logical operator nest, reset the MCDC temp to 0. - if (CGF.MCDCLogOpStack.empty()) + if (CGF.isMCDCDecisionExpr(E)) CGF.maybeResetMCDCCondBitmap(E); - CGF.MCDCLogOpStack.push_back(E); - Value *RHSCond = CGF.EvaluateExprAsBool(E->getRHS()); // If we're generating for profiling or coverage, generate a branch to a @@ -5014,9 +5012,8 @@ Value *ScalarExprEmitter::VisitBinLAnd(const BinaryOperator *E) { } else CGF.markStmtMaybeUsed(E->getRHS()); - CGF.MCDCLogOpStack.pop_back(); // If the top of the logical operator nest, update the MCDC bitmap. - if (CGF.MCDCLogOpStack.empty()) + if (CGF.isMCDCDecisionExpr(E)) CGF.maybeUpdateMCDCTestVectorBitmap(E); // ZExt result to int or bool. @@ -5031,11 +5028,9 @@ Value *ScalarExprEmitter::VisitBinLAnd(const BinaryOperator *E) { } // If the top of the logical operator nest, reset the MCDC temp to 0. - if (CGF.MCDCLogOpStack.empty()) + if (CGF.isMCDCDecisionExpr(E)) CGF.maybeResetMCDCCondBitmap(E); - CGF.MCDCLogOpStack.push_back(E); - llvm::BasicBlock *ContBlock = CGF.createBasicBlock("land.end"); llvm::BasicBlock *RHSBlock = CGF.createBasicBlock("land.rhs"); @@ -5086,9 +5081,8 @@ Value *ScalarExprEmitter::VisitBinLAnd(const BinaryOperator *E) { // Insert an entry into the phi node for the edge with the value of RHSCond. PN->addIncoming(RHSCond, RHSBlock); - CGF.MCDCLogOpStack.pop_back(); // If the top of the logical operator nest, update the MCDC bitmap. - if (CGF.MCDCLogOpStack.empty()) + if (CGF.isMCDCDecisionExpr(E)) CGF.maybeUpdateMCDCTestVectorBitmap(E); // Artificial location to preserve the scope information @@ -5133,11 +5127,9 @@ Value *ScalarExprEmitter::VisitBinLOr(const BinaryOperator *E) { CGF.incrementProfileCounter(E); // If the top of the logical operator nest, reset the MCDC temp to 0. - if (CGF.MCDCLogOpStack.empty()) + if (CGF.isMCDCDecisionExpr(E)) CGF.maybeResetMCDCCondBitmap(E); - CGF.MCDCLogOpStack.push_back(E); - Value *RHSCond = CGF.EvaluateExprAsBool(E->getRHS()); // If we're generating for profiling or coverage, generate a branch to a @@ -5157,9 +5149,8 @@ Value *ScalarExprEmitter::VisitBinLOr(const BinaryOperator *E) { } else CGF.markStmtMaybeUsed(E->getRHS()); - CGF.MCDCLogOpStack.pop_back(); // If the top of the logical operator nest, update the MCDC bitmap. - if (CGF.MCDCLogOpStack.empty()) + if (CGF.isMCDCDecisionExpr(E)) CGF.maybeUpdateMCDCTestVectorBitmap(E); // ZExt result to int or bool. @@ -5174,11 +5165,9 @@ Value *ScalarExprEmitter::VisitBinLOr(const BinaryOperator *E) { } // If the top of the logical operator nest, reset the MCDC temp to 0. - if (CGF.MCDCLogOpStack.empty()) + if (CGF.isMCDCDecisionExpr(E)) CGF.maybeResetMCDCCondBitmap(E); - CGF.MCDCLogOpStack.push_back(E); - llvm::BasicBlock *ContBlock = CGF.createBasicBlock("lor.end"); llvm::BasicBlock *RHSBlock = CGF.createBasicBlock("lor.rhs"); @@ -5229,9 +5218,8 @@ Value *ScalarExprEmitter::VisitBinLOr(const BinaryOperator *E) { CGF.EmitBlock(ContBlock); PN->addIncoming(RHSCond, RHSBlock); - CGF.MCDCLogOpStack.pop_back(); // If the top of the logical operator nest, update the MCDC bitmap. - if (CGF.MCDCLogOpStack.empty()) + if (CGF.isMCDCDecisionExpr(E)) CGF.maybeUpdateMCDCTestVectorBitmap(E); // ZExt result to int. @@ -5390,8 +5378,8 @@ VisitAbstractConditionalOperator(const AbstractConditionalOperator *E) { } // If the top of the logical operator nest, reset the MCDC temp to 0. - if (CGF.MCDCLogOpStack.empty()) - CGF.maybeResetMCDCCondBitmap(condExpr); + if (auto E = CGF.stripCond(condExpr); CGF.isMCDCDecisionExpr(E)) + CGF.maybeResetMCDCCondBitmap(E); llvm::BasicBlock *LHSBlock = CGF.createBasicBlock("cond.true"); llvm::BasicBlock *RHSBlock = CGF.createBasicBlock("cond.false"); @@ -5406,8 +5394,8 @@ VisitAbstractConditionalOperator(const AbstractConditionalOperator *E) { // If the top of the logical operator nest, update the MCDC bitmap for the // ConditionalOperator prior to visiting its LHS and RHS blocks, since they // may also contain a boolean expression. - if (CGF.MCDCLogOpStack.empty()) - CGF.maybeUpdateMCDCTestVectorBitmap(condExpr); + if (auto E = CGF.stripCond(condExpr); CGF.isMCDCDecisionExpr(E)) + CGF.maybeUpdateMCDCTestVectorBitmap(E); if (llvm::EnableSingleByteCoverage) CGF.incrementProfileCounter(lhsExpr); @@ -5426,8 +5414,8 @@ VisitAbstractConditionalOperator(const AbstractConditionalOperator *E) { // If the top of the logical operator nest, update the MCDC bitmap for the // ConditionalOperator prior to visiting its LHS and RHS blocks, since they // may also contain a boolean expression. - if (CGF.MCDCLogOpStack.empty()) - CGF.maybeUpdateMCDCTestVectorBitmap(condExpr); + if (auto E = CGF.stripCond(condExpr); CGF.isMCDCDecisionExpr(E)) + CGF.maybeUpdateMCDCTestVectorBitmap(E); if (llvm::EnableSingleByteCoverage) CGF.incrementProfileCounter(rhsExpr); |