From: Steve Naroff Date: Tue, 20 Jan 2009 21:06:31 +0000 (+0000) Subject: Convert more exprs to use ASTContext's Allocator. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9e0b600dc7373ee7d2857ef5ccebca599ebb5178;p=clang Convert more exprs to use ASTContext's Allocator. When using a BumpPtrAllocator, this reduces malloc overhead from 2.2->1.9% (for Cocoa.h). At this point, malloc() has dropped the fourth most expensive routine (behind Preprocessor::HandleIdentifier()). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62612 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 33f21b91e1..8a8fb731c7 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -3529,11 +3529,14 @@ Action::OwningExprResult Sema::CreateBuiltinBinOp(SourceLocation OpLoc, } if (ResultTy.isNull()) return ExprError(); - if (CompTy.isNull()) - return Owned(new BinaryOperator(lhs, rhs, Opc, ResultTy, OpLoc)); - else - return Owned(new CompoundAssignOperator(lhs, rhs, Opc, ResultTy, - CompTy, OpLoc)); + if (CompTy.isNull()) { + void *Mem = Context.getAllocator().Allocate(); + return Owned(new (Mem) BinaryOperator(lhs, rhs, Opc, ResultTy, OpLoc)); + } else { + void *Mem = Context.getAllocator().Allocate(); + return Owned(new (Mem) CompoundAssignOperator(lhs, rhs, Opc, ResultTy, + CompTy, OpLoc)); + } } // Binary Operators. 'Tok' is the token for the operator. @@ -3550,13 +3553,16 @@ Action::OwningExprResult Sema::ActOnBinOp(Scope *S, SourceLocation TokLoc, // FIXME: We'll need to perform some caching of the result of name // lookup for operator+. if (lhs->isTypeDependent() || rhs->isTypeDependent()) { - if (Opc > BinaryOperator::Assign && Opc <= BinaryOperator::OrAssign) - return Owned(new CompoundAssignOperator(lhs, rhs, Opc, + if (Opc > BinaryOperator::Assign && Opc <= BinaryOperator::OrAssign) { + void *Mem = Context.getAllocator().Allocate(); + return Owned(new (Mem) CompoundAssignOperator(lhs, rhs, Opc, Context.DependentTy, Context.DependentTy, TokLoc)); - else - return Owned(new BinaryOperator(lhs, rhs, Opc, Context.DependentTy, - TokLoc)); + } else { + void *Mem = Context.getAllocator().Allocate(); + return Owned(new (Mem) BinaryOperator(lhs, rhs, Opc, Context.DependentTy, + TokLoc)); + } } if (getLangOptions().CPlusPlus && @@ -3832,7 +3838,8 @@ Action::OwningExprResult Sema::ActOnUnaryOp(Scope *S, SourceLocation OpLoc, if (resultType.isNull()) return ExprError(); input.release(); - return Owned(new UnaryOperator(Input, Opc, resultType, OpLoc)); + void *Mem = Context.getAllocator().Allocate(); + return Owned(new (Mem) UnaryOperator(Input, Opc, resultType, OpLoc)); } /// ActOnAddrLabel - Parse the GNU address of label extension: "&&foo".