Lines Matching refs:llvm

24 #include "llvm/IR/Constants.h"
25 #include "llvm/IR/DataLayout.h"
26 #include "llvm/IR/Function.h"
27 #include "llvm/IR/GlobalVariable.h"
43 SmallVector<llvm::Constant *, 32> Elements;
45 static llvm::Constant *BuildStruct(CodeGenModule &CGM, CodeGenFunction *CGF,
47 static llvm::Constant *BuildStruct(CodeGenModule &CGM, CodeGenFunction *CGF,
57 llvm::Constant *InitExpr);
59 void AppendBytes(CharUnits FieldOffsetInChars, llvm::Constant *InitCst);
62 llvm::ConstantInt *InitExpr);
73 llvm::Constant *Finalize(QualType Ty);
75 CharUnits getAlignment(const llvm::Constant *C) const {
81 CharUnits getSizeInChars(const llvm::Constant *C) const {
89 llvm::Constant *InitCst) {
98 AppendBytes(CharUnits FieldOffsetInChars, llvm::Constant *InitCst) {
142 llvm::ConstantInt *CI) {
149 llvm::RoundUpToAlignment(FieldOffset - NextFieldOffsetInBits,
157 llvm::APInt FieldValue = CI->getValue();
181 llvm::APInt Tmp = FieldValue;
210 llvm::Value *LastElt = Elements.back();
211 if (llvm::ConstantInt *Val = dyn_cast<llvm::ConstantInt>(LastElt))
214 assert(isa<llvm::UndefValue>(LastElt));
219 if (!isa<llvm::IntegerType>(LastElt->getType())) {
222 assert(isa<llvm::ArrayType>(LastElt->getType()) &&
224 llvm::ArrayType *AT = cast<llvm::ArrayType>(LastElt->getType());
236 assert(isa<llvm::UndefValue>(Elements.back()) &&
242 Elements.back() = llvm::ConstantInt::get(CGM.getLLVMContext(), Tmp);
249 llvm::APInt Tmp;
262 Elements.push_back(llvm::ConstantInt::get(CGM.getLLVMContext(), Tmp));
283 Elements.push_back(llvm::ConstantInt::get(CGM.getLLVMContext(),
292 llvm::Type *Ty = CGM.Int8Ty;
294 Ty = llvm::ArrayType::get(Ty, PadSize.getQuantity());
296 llvm::Constant *C = llvm::UndefValue::get(Ty);
312 SmallVector<llvm::Constant *, 16> PackedElements;
316 llvm::Constant *C = Elements[i];
328 llvm::Type *Ty = CGM.Int8Ty;
330 Ty = llvm::ArrayType::get(Ty, NumChars.getQuantity());
332 llvm::Constant *Padding = llvm::UndefValue::get(Ty);
368 llvm::Constant *EltInit;
384 cast<llvm::ConstantInt>(EltInit));
414 llvm::Constant *VTableAddressPoint =
459 llvm::Constant *EltInit =
469 cast<llvm::ConstantInt>(EltInit));
474 llvm::Constant *ConstStructBuilder::Finalize(QualType Ty) {
510 llvm::StructType *STy =
511 llvm::ConstantStruct::getTypeForElements(CGM.getLLVMContext(),
513 llvm::Type *ValTy = CGM.getTypes().ConvertType(Ty);
514 if (llvm::StructType *ValSTy = dyn_cast<llvm::StructType>(ValTy)) {
519 llvm::Constant *Result = llvm::ConstantStruct::get(STy, Elements);
527 llvm::Constant *ConstStructBuilder::BuildStruct(CodeGenModule &CGM,
538 llvm::Constant *ConstStructBuilder::BuildStruct(CodeGenModule &CGM,
561 public StmtVisitor<ConstExprEmitter, llvm::Constant*> {
564 llvm::LLVMContext &VMContext;
574 llvm::Constant *VisitStmt(Stmt *S) {
578 llvm::Constant *VisitParenExpr(ParenExpr *PE) {
582 llvm::Constant *
587 llvm::Constant *VisitGenericSelectionExpr(GenericSelectionExpr *GE) {
591 llvm::Constant *VisitChooseExpr(ChooseExpr *CE) {
595 llvm::Constant *VisitCompoundLiteralExpr(CompoundLiteralExpr *E) {
599 llvm::Constant *VisitCastExpr(CastExpr* E) {
601 llvm::Constant *C = CGM.EmitConstantExpr(subExpr, subExpr->getType(), CGF);
604 llvm::Type *destType = ConvertType(E->getType());
614 SmallVector<llvm::Constant*, 2> Elts;
615 SmallVector<llvm::Type*, 2> Types;
623 llvm::Type *Ty = CGM.Int8Ty;
625 Ty = llvm::ArrayType::get(Ty, NumPadBytes);
627 Elts.push_back(llvm::UndefValue::get(Ty));
631 llvm::StructType* STy =
632 llvm::StructType::get(C->getType()->getContext(), Types, false);
633 return llvm::ConstantStruct::get(STy, Elts);
637 return llvm::ConstantExpr::getAddrSpaceCast(C, destType);
709 llvm::Constant *VisitCXXDefaultArgExpr(CXXDefaultArgExpr *DAE) {
713 llvm::Constant *VisitCXXDefaultInitExpr(CXXDefaultInitExpr *DIE) {
719 llvm::Constant *VisitMaterializeTemporaryExpr(MaterializeTemporaryExpr *E) {
723 llvm::Constant *EmitArrayInitialization(InitListExpr *ILE) {
727 llvm::ArrayType *AType =
728 cast<llvm::ArrayType>(ConvertType(ILE->getType()));
729 llvm::Type *ElemTy = AType->getElementType();
738 std::vector<llvm::Constant*> Elts;
744 llvm::Constant *C = CGM.EmitConstantExpr(Init, Init->getType(), CGF);
753 llvm::Constant *fillC;
757 fillC = llvm::Constant::getNullValue(ElemTy);
765 std::vector<llvm::Type*> Types;
769 llvm::StructType *SType = llvm::StructType::get(AType->getContext(),
771 return llvm::ConstantStruct::get(SType, Elts);
774 return llvm::ConstantArray::get(AType, Elts);
777 llvm::Constant *EmitRecordInitialization(InitListExpr *ILE) {
781 llvm::Constant *VisitImplicitValueInitExpr(ImplicitValueInitExpr* E) {
785 llvm::Constant *VisitInitListExpr(InitListExpr *ILE) {
795 llvm::Constant *VisitCXXConstructExpr(CXXConstructExpr *E) {
829 llvm::Constant *VisitStringLiteral(StringLiteral *E) {
833 llvm::Constant *VisitObjCEncodeExpr(ObjCEncodeExpr *E) {
847 return llvm::ConstantDataArray::getString(VMContext, Str, false);
850 llvm::Constant *VisitUnaryExtension(const UnaryOperator *E) {
855 llvm::Type *ConvertType(QualType T) {
860 llvm::Constant *EmitLValue(APValue::LValueBase LVBase) {
885 llvm::Constant* C = CGM.EmitConstantExpr(CLE->getInitializer(),
889 C = new llvm::GlobalVariable(CGM.getModule(), C->getType(),
891 llvm::GlobalValue::InternalLinkage,
893 llvm::GlobalVariable::NotThreadLocal,
903 llvm::Constant *C =
905 return llvm::ConstantExpr::getBitCast(C, ConvertType(E->getType()));
911 return cast<llvm::Constant>(Res.getAddress());
920 llvm::Constant *Ptr =
922 return llvm::ConstantExpr::getBitCast(Ptr, ConvertType(E->getType()));
979 llvm::Constant *CodeGenModule::EmitConstantInit(const VarDecl &D,
1012 llvm::Constant* C = ConstExprEmitter(*this, CGF).Visit(const_cast<Expr*>(E));
1014 llvm::Type *BoolTy = getTypes().ConvertTypeForMem(E->getType());
1015 C = llvm::ConstantExpr::getZExt(C, BoolTy);
1020 llvm::Constant *CodeGenModule::EmitConstantExpr(const Expr *E,
1032 llvm::Constant *C = nullptr;
1039 llvm::Type *BoolTy = getTypes().ConvertTypeForMem(E->getType());
1040 C = llvm::ConstantExpr::getZExt(C, BoolTy);
1045 llvm::Constant *CodeGenModule::EmitConstantValue(const APValue &Value,
1052 llvm::Type *DestTy = getTypes().ConvertTypeForMem(DestType);
1053 llvm::Constant *Offset =
1054 llvm::ConstantInt::get(Int64Ty, Value.getLValueOffset().getQuantity());
1056 llvm::Constant *C;
1059 if (isa<llvm::ArrayType>(DestTy)) {
1070 llvm::Type *CharPtrTy = Int8Ty->getPointerTo(AS);
1071 llvm::Constant *Casted = llvm::ConstantExpr::getBitCast(C, CharPtrTy);
1072 Casted = llvm::ConstantExpr::getGetElementPtr(Casted, Offset);
1073 C = llvm::ConstantExpr::getPointerCast(Casted, C->getType());
1078 if (isa<llvm::PointerType>(DestTy))
1079 return llvm::ConstantExpr::getPointerCast(C, DestTy);
1081 return llvm::ConstantExpr::getPtrToInt(C, DestTy);
1087 if (isa<llvm::PointerType>(DestTy))
1088 return llvm::ConstantExpr::getIntToPtr(C, DestTy);
1092 return llvm::ConstantExpr::getTrunc(C, DestTy);
1098 return llvm::ConstantInt::get(VMContext, Value.getInt());
1100 llvm::Constant *Complex[2];
1102 Complex[0] = llvm::ConstantInt::get(VMContext,
1104 Complex[1] = llvm::ConstantInt::get(VMContext,
1108 llvm::StructType *STy = llvm::StructType::get(Complex[0]->getType(),
1111 return llvm::ConstantStruct::get(STy, Complex);
1114 const llvm::APFloat &Init = Value.getFloat();
1115 if (&Init.getSemantics() == &llvm::APFloat::IEEEhalf &&
1117 return llvm::ConstantInt::get(VMContext, Init.bitcastToAPInt());
1119 return llvm::ConstantFP::get(VMContext, Init);
1122 llvm::Constant *Complex[2];
1124 Complex[0] = llvm::ConstantFP::get(VMContext,
1126 Complex[1] = llvm::ConstantFP::get(VMContext,
1130 llvm::StructType *STy = llvm::StructType::get(Complex[0]->getType(),
1133 return llvm::ConstantStruct::get(STy, Complex);
1136 SmallVector<llvm::Constant *, 4> Inits;
1142 Inits.push_back(llvm::ConstantInt::get(VMContext, Elt.getInt()));
1144 Inits.push_back(llvm::ConstantFP::get(VMContext, Elt.getFloat()));
1146 return llvm::ConstantVector::get(Inits);
1151 llvm::Constant *LHS = EmitConstantExpr(LHSExpr, LHSExpr->getType(), CGF);
1152 llvm::Constant *RHS = EmitConstantExpr(RHSExpr, RHSExpr->getType(), CGF);
1155 llvm::Type *ResultType = getTypes().ConvertType(DestType);
1156 LHS = llvm::ConstantExpr::getPtrToInt(LHS, IntPtrTy);
1157 RHS = llvm::ConstantExpr::getPtrToInt(RHS, IntPtrTy);
1158 llvm::Constant *AddrLabelDiff = llvm::ConstantExpr::getSub(LHS, RHS);
1163 return llvm::ConstantExpr::getTruncOrBitCast(AddrLabelDiff, ResultType);
1173 std::vector<llvm::Constant*> Elts;
1177 llvm::Constant *Filler = nullptr;
1183 llvm::Type *CommonElementType = nullptr;
1185 llvm::Constant *C = Filler;
1200 std::vector<llvm::Type*> Types;
1204 llvm::StructType *SType = llvm::StructType::get(VMContext, Types, true);
1205 return llvm::ConstantStruct::get(SType, Elts);
1208 llvm::ArrayType *AType =
1209 llvm::ArrayType::get(CommonElementType, NumElements);
1210 return llvm::ConstantArray::get(AType, Elts);
1218 llvm::Constant *
1222 llvm::Constant *C = EmitConstantValue(Value, DestType, CGF);
1224 llvm::Type *BoolTy = getTypes().ConvertTypeForMem(DestType);
1225 C = llvm::ConstantExpr::getZExt(C, BoolTy);
1230 llvm::Constant *
1236 llvm::Constant *
1254 SmallVectorImpl<llvm::Constant *> &Elements,
1320 llvm::Constant *NegativeOne =
1321 llvm::ConstantInt::get(CGM.Int8Ty, -1ULL, /*isSigned*/true);
1329 static llvm::Constant *EmitNullConstantForBase(CodeGenModule &CGM,
1330 llvm::Type *baseType,
1333 static llvm::Constant *EmitNullConstant(CodeGenModule &CGM,
1337 llvm::StructType *structure =
1342 std::vector<llvm::Constant *> elements(numElements);
1360 llvm::Type *baseType = structure->getElementType(fieldIndex);
1393 llvm::Type *baseType = structure->getElementType(fieldIndex);
1401 elements[i] = llvm::Constant::getNullValue(structure->getElementType(i));
1404 return llvm::ConstantStruct::get(structure, elements);
1408 static llvm::Constant *EmitNullConstantForBase(CodeGenModule &CGM,
1409 llvm::Type *baseType,
1415 return llvm::Constant::getNullValue(baseType);
1418 if (isa<llvm::StructType>(baseType)) {
1425 llvm::ArrayType *baseArrayType = cast<llvm::ArrayType>(baseType);
1429 SmallVector<llvm::Constant *, 16> baseElements(numBaseElements);
1435 llvm::Constant *i8_zero = llvm::Constant::getNullValue(CGM.Int8Ty);
1442 return llvm::ConstantArray::get(baseArrayType, baseElements);
1445 llvm::Constant *CodeGenModule::EmitNullConstant(QualType T) {
1447 return llvm::Constant::getNullValue(getTypes().ConvertTypeForMem(T));
1450 llvm::ArrayType *ATy =
1451 cast<llvm::ArrayType>(getTypes().ConvertTypeForMem(T));
1455 llvm::Constant *Element = EmitNullConstant(ElementTy);
1459 return llvm::ConstantAggregateZero::get(ATy);
1461 SmallVector<llvm::Constant *, 8> Array(NumElements, Element);
1462 return llvm::ConstantArray::get(ATy, Array);
1479 llvm::Constant *