diff options
author | John McCall <rjmccall@apple.com> | 2011-01-26 04:00:11 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2011-01-26 04:00:11 +0000 |
commit | 150b462afc7a713edd19bcbbbb22381fe060d4f5 (patch) | |
tree | d90a44bc497a080b64d9143f25f9ef32b6c1228f /lib/CodeGen/CGExprComplex.cpp | |
parent | 83f51722ed2b8134810cb178f39e44da811de7cd (diff) |
Better framework for conditional cleanups; untested as yet.
I'm separately committing this because it incidentally changes some
block orderings and minor IR issues, like using a phi instead of
an unnecessary alloca.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@124277 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGExprComplex.cpp')
-rw-r--r-- | lib/CodeGen/CGExprComplex.cpp | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/lib/CodeGen/CGExprComplex.cpp b/lib/CodeGen/CGExprComplex.cpp index bdd245414b..21c298a96a 100644 --- a/lib/CodeGen/CGExprComplex.cpp +++ b/lib/CodeGen/CGExprComplex.cpp @@ -325,9 +325,8 @@ ComplexPairTy ComplexExprEmitter::VisitCallExpr(const CallExpr *E) { } ComplexPairTy ComplexExprEmitter::VisitStmtExpr(const StmtExpr *E) { - RValue result = CGF.EmitCompoundStmt(*E->getSubStmt(), true); - CGF.EnsureInsertPoint(); - return result.getComplexVal(); + CodeGenFunction::StmtExprEvaluation eval(CGF); + return CGF.EmitCompoundStmt(*E->getSubStmt(), true).getComplexVal(); } /// EmitComplexToComplexCast - Emit a cast from complex value Val to DestType. @@ -647,29 +646,32 @@ VisitConditionalOperator(const ConditionalOperator *E) { llvm::BasicBlock *RHSBlock = CGF.createBasicBlock("cond.false"); llvm::BasicBlock *ContBlock = CGF.createBasicBlock("cond.end"); + CodeGenFunction::ConditionalEvaluation eval(CGF); + if (E->getLHS()) CGF.EmitBranchOnBoolExpr(E->getCond(), LHSBlock, RHSBlock); else { Expr *save = E->getSAVE(); assert(save && "VisitConditionalOperator - save is null"); - // Intentianlly not doing direct assignment to ConditionalSaveExprs[save] !! + // Intentionally not doing direct assignment to ConditionalSaveExprs[save] !! ComplexPairTy SaveVal = Visit(save); CGF.ConditionalSaveComplexExprs[save] = SaveVal; CGF.EmitBranchOnBoolExpr(E->getCond(), LHSBlock, RHSBlock); } + eval.begin(CGF); CGF.EmitBlock(LHSBlock); ComplexPairTy LHS = Visit(E->getTrueExpr()); LHSBlock = Builder.GetInsertBlock(); CGF.EmitBranch(ContBlock); + eval.end(CGF); + eval.begin(CGF); CGF.EmitBlock(RHSBlock); - ComplexPairTy RHS = Visit(E->getRHS()); RHSBlock = Builder.GetInsertBlock(); - CGF.EmitBranch(ContBlock); - CGF.EmitBlock(ContBlock); + eval.end(CGF); // Create a PHI node for the real part. llvm::PHINode *RealPN = Builder.CreatePHI(LHS.first->getType(), "cond.r"); |