Lines Matching full:constant
1 //===--- CGExprConstant.cpp - Emit LLVM Code from Constant Expressions ----===//
10 // This contains code to emit Constant Expr nodes as LLVM code.
43 SmallVector<llvm::Constant *, 32> Elements;
45 static llvm::Constant *BuildStruct(CodeGenModule &CGM, CodeGenFunction *CGF,
47 static llvm::Constant *BuildStruct(CodeGenModule &CGM, CodeGenFunction *CGF,
56 void AppendVTablePointer(BaseSubobject Base, llvm::Constant *VTable,
60 llvm::Constant *InitExpr);
62 void AppendBytes(CharUnits FieldOffsetInChars, llvm::Constant *InitCst);
75 llvm::Constant *VTable, const CXXRecordDecl *VTableClass,
77 llvm::Constant *Finalize(QualType Ty);
79 CharUnits getAlignment(const llvm::Constant *C) const {
85 CharUnits getSizeInChars(const llvm::Constant *C) const {
92 llvm::Constant *VTable,
101 llvm::Constant *VTableAddressPoint =
110 llvm::Constant *InitCst) {
119 AppendBytes(CharUnits FieldOffsetInChars, llvm::Constant *InitCst) {
317 llvm::Constant *C = llvm::UndefValue::get(Ty);
333 SmallVector<llvm::Constant *, 16> PackedElements;
337 llvm::Constant *C = Elements[i];
353 llvm::Constant *Padding = llvm::UndefValue::get(Ty);
389 llvm::Constant *EltInit;
427 bool IsPrimaryBase, llvm::Constant *VTable,
476 llvm::Constant *EltInit =
491 llvm::Constant *ConstStructBuilder::Finalize(QualType Ty) {
536 llvm::Constant *Result = llvm::ConstantStruct::get(STy, Elements);
544 llvm::Constant *ConstStructBuilder::BuildStruct(CodeGenModule &CGM,
555 llvm::Constant *ConstStructBuilder::BuildStruct(CodeGenModule &CGM,
563 llvm::Constant *VTable = 0;
580 /// constant fold these types).
582 public StmtVisitor<ConstExprEmitter, llvm::Constant*> {
595 llvm::Constant *VisitStmt(Stmt *S) {
599 llvm::Constant *VisitParenExpr(ParenExpr *PE) {
603 llvm::Constant *
608 llvm::Constant *VisitGenericSelectionExpr(GenericSelectionExpr *GE) {
612 llvm::Constant *VisitChooseExpr(ChooseExpr *CE) {
616 llvm::Constant *VisitCompoundLiteralExpr(CompoundLiteralExpr *E) {
620 llvm::Constant *VisitCastExpr(CastExpr* E) {
622 llvm::Constant *C = CGM.EmitConstantExpr(subExpr, subExpr->getType(), CGF);
635 SmallVector<llvm::Constant*, 2> Elts;
727 llvm::Constant *VisitCXXDefaultArgExpr(CXXDefaultArgExpr *DAE) {
731 llvm::Constant *VisitCXXDefaultInitExpr(CXXDefaultInitExpr *DIE) {
733 // constant expression.
737 llvm::Constant *VisitMaterializeTemporaryExpr(MaterializeTemporaryExpr *E) {
741 llvm::Constant *EmitArrayInitialization(InitListExpr *ILE) {
756 std::vector<llvm::Constant*> Elts;
762 llvm::Constant *C = CGM.EmitConstantExpr(Init, Init->getType(), CGF);
771 llvm::Constant *fillC;
775 fillC = llvm::Constant::getNullValue(ElemTy);
795 llvm::Constant *EmitRecordInitialization(InitListExpr *ILE) {
799 llvm::Constant *VisitImplicitValueInitExpr(ImplicitValueInitExpr* E) {
803 llvm::Constant *VisitInitListExpr(InitListExpr *ILE) {
813 llvm::Constant *VisitCXXConstructExpr(CXXConstructExpr *E) {
825 // constant expr.
847 llvm::Constant *VisitStringLiteral(StringLiteral *E) {
851 llvm::Constant *VisitObjCEncodeExpr(ObjCEncodeExpr *E) {
865 llvm::Constant *VisitUnaryExtension(const UnaryOperator *E) {
875 llvm::Constant *EmitLValue(APValue::LValueBase LVBase) {
900 llvm::Constant* C = CGM.EmitConstantExpr(CLE->getInitializer(),
918 llvm::Constant *C =
926 return cast<llvm::Constant>(Res.getAddress());
935 llvm::Constant *Ptr =
994 llvm::Constant *CodeGenModule::EmitConstantInit(const VarDecl &D,
1016 // reference is a constant expression, and the reference binds to a temporary,
1017 // then constant initialization is performed. ConstExprEmitter will
1018 // incorrectly emit a prvalue constant in this case, and the calling code
1027 llvm::Constant* C = ConstExprEmitter(*this, CGF).Visit(const_cast<Expr*>(E));
1035 llvm::Constant *CodeGenModule::EmitConstantExpr(const Expr *E,
1047 llvm::Constant *C = 0;
1060 llvm::Constant *CodeGenModule::EmitConstantValue(const APValue &Value,
1065 llvm_unreachable("Constant expressions should be initialized.");
1068 llvm::Constant *Offset =
1071 llvm::Constant *C;
1084 llvm::Constant *Casted = llvm::ConstantExpr::getBitCast(C, Int8PtrTy);
1113 llvm::Constant *Complex[2];
1135 llvm::Constant *Complex[2];
1149 SmallVector<llvm::Constant *, 4> Inits;
1164 llvm::Constant *LHS = EmitConstantExpr(LHSExpr, LHSExpr->getType(), CGF);
1165 llvm::Constant *RHS = EmitConstantExpr(RHSExpr, RHSExpr->getType(), CGF);
1171 llvm::Constant *AddrLabelDiff = llvm::ConstantExpr::getSub(LHS, RHS);
1186 std::vector<llvm::Constant*> Elts;
1190 llvm::Constant *Filler = 0;
1198 llvm::Constant *C = Filler;
1231 llvm::Constant *
1235 llvm::Constant *C = EmitConstantValue(Value, DestType, CGF);
1243 llvm::Constant *
1249 llvm::Constant *
1267 SmallVectorImpl<llvm::Constant *> &Elements,
1334 llvm::Constant *NegativeOne =
1343 static llvm::Constant *EmitNullConstantForBase(CodeGenModule &CGM,
1347 static llvm::Constant *EmitNullConstant(CodeGenModule &CGM,
1356 std::vector<llvm::Constant *> elements(numElements);
1420 elements[i] = llvm::Constant::getNullValue(structure->getElementType(i));
1426 /// Emit the null constant for a base subobject.
1427 static llvm::Constant *EmitNullConstantForBase(CodeGenModule &CGM,
1434 return llvm::Constant::getNullValue(baseType);
1436 // If the base type is a struct, we can just use its null constant.
1448 SmallVector<llvm::Constant *, 16> baseElements(numBaseElements);
1454 llvm::Constant *i8_zero = llvm::Constant::getNullValue(CGM.Int8Ty);
1464 llvm::Constant *CodeGenModule::EmitNullConstant(QualType T) {
1466 return llvm::Constant::getNullValue(getTypes().ConvertTypeForMem(T));
1474 llvm::Constant *Element = EmitNullConstant(ElementTy);
1480 SmallVector<llvm::Constant *, 8> Array(NumElements, Element);
1498 llvm::Constant *