forked from OSchip/llvm-project
[CodeGen] Move `emitConstant` from ScalarExprEmitter to CodeGenFunction. NFC.
The goal is to use `emitConstant` in more places. Didn't move `ComplexExprEmitter::emitConstant` because it returns a different type. Reviewers: rjmccall, ahatanak Reviewed By: rjmccall Subscribers: dexonsmith, erik.pilkington, cfe-commits Differential Revision: https://reviews.llvm.org/D53725 llvm-svn: 345897
This commit is contained in:
parent
56c0ee02af
commit
ef1899b01d
|
@ -1491,6 +1491,16 @@ CodeGenFunction::tryEmitAsConstant(const MemberExpr *ME) {
|
|||
return ConstantEmission();
|
||||
}
|
||||
|
||||
llvm::Value *CodeGenFunction::emitScalarConstant(
|
||||
const CodeGenFunction::ConstantEmission &Constant, Expr *E) {
|
||||
assert(Constant && "not a constant");
|
||||
if (Constant.isReference())
|
||||
return EmitLoadOfLValue(Constant.getReferenceLValue(*this, E),
|
||||
E->getExprLoc())
|
||||
.getScalarVal();
|
||||
return Constant.getValue();
|
||||
}
|
||||
|
||||
llvm::Value *CodeGenFunction::EmitLoadOfScalar(LValue lvalue,
|
||||
SourceLocation Loc) {
|
||||
return EmitLoadOfScalar(lvalue.getAddress(), lvalue.isVolatile(),
|
||||
|
|
|
@ -466,19 +466,10 @@ public:
|
|||
return CGF.getOrCreateOpaqueRValueMapping(E).getScalarVal();
|
||||
}
|
||||
|
||||
Value *emitConstant(const CodeGenFunction::ConstantEmission &Constant,
|
||||
Expr *E) {
|
||||
assert(Constant && "not a constant");
|
||||
if (Constant.isReference())
|
||||
return EmitLoadOfLValue(Constant.getReferenceLValue(CGF, E),
|
||||
E->getExprLoc());
|
||||
return Constant.getValue();
|
||||
}
|
||||
|
||||
// l-values.
|
||||
Value *VisitDeclRefExpr(DeclRefExpr *E) {
|
||||
if (CodeGenFunction::ConstantEmission Constant = CGF.tryEmitAsConstant(E))
|
||||
return emitConstant(Constant, E);
|
||||
return CGF.emitScalarConstant(Constant, E);
|
||||
return EmitLoadOfLValue(E);
|
||||
}
|
||||
|
||||
|
@ -1714,7 +1705,7 @@ Value *ScalarExprEmitter::VisitConvertVectorExpr(ConvertVectorExpr *E) {
|
|||
Value *ScalarExprEmitter::VisitMemberExpr(MemberExpr *E) {
|
||||
if (CodeGenFunction::ConstantEmission Constant = CGF.tryEmitAsConstant(E)) {
|
||||
CGF.EmitIgnoredExpr(E->getBase());
|
||||
return emitConstant(Constant, E);
|
||||
return CGF.emitScalarConstant(Constant, E);
|
||||
} else {
|
||||
llvm::APSInt Value;
|
||||
if (E->EvaluateAsInt(Value, CGF.getContext(), Expr::SE_AllowSideEffects)) {
|
||||
|
|
|
@ -3524,6 +3524,7 @@ public:
|
|||
|
||||
ConstantEmission tryEmitAsConstant(DeclRefExpr *refExpr);
|
||||
ConstantEmission tryEmitAsConstant(const MemberExpr *ME);
|
||||
llvm::Value *emitScalarConstant(const ConstantEmission &Constant, Expr *E);
|
||||
|
||||
RValue EmitPseudoObjectRValue(const PseudoObjectExpr *e,
|
||||
AggValueSlot slot = AggValueSlot::ignored());
|
||||
|
|
Loading…
Reference in New Issue