From: Sander de Smalen Date: Thu, 1 Feb 2018 12:27:13 +0000 (+0000) Subject: Reverting patch rL323952 due to build errors that I X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=294a4f68ffd3bfbd9cde07f3c0b37f37077c66c5;p=clang Reverting patch rL323952 due to build errors that I haven't encountered in local builds. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@323956 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGBlocks.cpp b/lib/CodeGen/CGBlocks.cpp index d60b5fbb70..5f73d4cf79 100644 --- a/lib/CodeGen/CGBlocks.cpp +++ b/lib/CodeGen/CGBlocks.cpp @@ -1479,8 +1479,8 @@ CodeGenFunction::GenerateBlockFunction(GlobalDecl GD, const CGBlockInfo::Capture &capture = blockInfo.getCapture(variable); if (capture.isConstant()) { auto addr = LocalDeclMap.find(variable)->second; - (void)DI->EmitDeclareOfAutoVariable(variable, addr.getPointer(), - Builder); + DI->EmitDeclareOfAutoVariable(variable, addr.getPointer(), + Builder); continue; } diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp index e766ccc203..d29e0791fb 100644 --- a/lib/CodeGen/CGDebugInfo.cpp +++ b/lib/CodeGen/CGDebugInfo.cpp @@ -2292,14 +2292,12 @@ llvm::DIType *CGDebugInfo::CreateType(const VectorType *Ty, llvm::DIFile *Unit) { llvm::DIType *ElementTy = getOrCreateType(Ty->getElementType(), Unit); int64_t Count = Ty->getNumElements(); + if (Count == 0) + // If number of elements are not known then this is an unbounded array. + // Use Count == -1 to express such arrays. + Count = -1; - llvm::Metadata *Subscript; - QualType QTy(Ty, 0); - auto SizeExpr = SizeExprCache.find(QTy); - if (SizeExpr != SizeExprCache.end()) - Subscript = DBuilder.getOrCreateSubrange(0, SizeExpr->getSecond()); - else - Subscript = DBuilder.getOrCreateSubrange(0, Count ? Count : -1); + llvm::Metadata *Subscript = DBuilder.getOrCreateSubrange(0, Count); llvm::DINodeArray SubscriptArray = DBuilder.getOrCreateArray(Subscript); uint64_t Size = CGM.getContext().getTypeSize(Ty); @@ -2356,12 +2354,8 @@ llvm::DIType *CGDebugInfo::CreateType(const ArrayType *Ty, llvm::DIFile *Unit) { } } - auto SizeNode = SizeExprCache.find(EltTy); - if (SizeNode != SizeExprCache.end()) - Subscripts.push_back( - DBuilder.getOrCreateSubrange(0, SizeNode->getSecond())); - else - Subscripts.push_back(DBuilder.getOrCreateSubrange(0, Count)); + // FIXME: Verify this is right for VLAs. + Subscripts.push_back(DBuilder.getOrCreateSubrange(0, Count)); EltTy = Ty->getElementType(); } @@ -3479,14 +3473,13 @@ llvm::DIType *CGDebugInfo::EmitTypeForVarWithBlocksAttr(const VarDecl *VD, nullptr, Elements); } -llvm::DILocalVariable *CGDebugInfo::EmitDeclare(const VarDecl *VD, - llvm::Value *Storage, - llvm::Optional ArgNo, - CGBuilderTy &Builder) { +void CGDebugInfo::EmitDeclare(const VarDecl *VD, llvm::Value *Storage, + llvm::Optional ArgNo, + CGBuilderTy &Builder) { assert(DebugKind >= codegenoptions::LimitedDebugInfo); assert(!LexicalBlockStack.empty() && "Region stack mismatch, stack empty!"); if (VD->hasAttr()) - return nullptr; + return; bool Unwritten = VD->isImplicit() || (isa(VD->getDeclContext()) && @@ -3504,7 +3497,7 @@ llvm::DILocalVariable *CGDebugInfo::EmitDeclare(const VarDecl *VD, // If there is no debug info for this type then do not emit debug info // for this variable. if (!Ty) - return nullptr; + return; // Get location information. unsigned Line = 0; @@ -3600,15 +3593,13 @@ llvm::DILocalVariable *CGDebugInfo::EmitDeclare(const VarDecl *VD, DBuilder.insertDeclare(Storage, D, DBuilder.createExpression(Expr), llvm::DebugLoc::get(Line, Column, Scope, CurInlinedAt), Builder.GetInsertBlock()); - - return D; } -llvm::DILocalVariable * -CGDebugInfo::EmitDeclareOfAutoVariable(const VarDecl *VD, llvm::Value *Storage, - CGBuilderTy &Builder) { +void CGDebugInfo::EmitDeclareOfAutoVariable(const VarDecl *VD, + llvm::Value *Storage, + CGBuilderTy &Builder) { assert(DebugKind >= codegenoptions::LimitedDebugInfo); - return EmitDeclare(VD, Storage, llvm::None, Builder); + EmitDeclare(VD, Storage, llvm::None, Builder); } llvm::DIType *CGDebugInfo::CreateSelfType(const QualType &QualTy, diff --git a/lib/CodeGen/CGDebugInfo.h b/lib/CodeGen/CGDebugInfo.h index de6dbdcd63..4f7b7f2a0d 100644 --- a/lib/CodeGen/CGDebugInfo.h +++ b/lib/CodeGen/CGDebugInfo.h @@ -81,10 +81,6 @@ class CGDebugInfo { llvm::SmallDenseMap DebugPrefixMap; - /// Cache that maps VLA types to size expressions for that type, - /// represented by instantiated Metadata nodes. - llvm::SmallDenseMap SizeExprCache; - struct ObjCInterfaceCacheEntry { const ObjCInterfaceType *Type; llvm::DIType *Decl; @@ -313,11 +309,6 @@ public: void finalize(); - /// Register VLA size expression debug node with the qualified type. - void registerVLASizeExpression(QualType Ty, llvm::Metadata *SizeExpr) { - SizeExprCache[Ty] = SizeExpr; - } - /// Module debugging: Support for building PCMs. /// @{ /// Set the main CU's DwoId field to \p Signature. @@ -388,11 +379,8 @@ public: /// Emit call to \c llvm.dbg.declare for an automatic variable /// declaration. - /// Returns a pointer to the DILocalVariable associated with the - /// llvm.dbg.declare, or nullptr otherwise. - llvm::DILocalVariable *EmitDeclareOfAutoVariable(const VarDecl *Decl, - llvm::Value *AI, - CGBuilderTy &Builder); + void EmitDeclareOfAutoVariable(const VarDecl *Decl, llvm::Value *AI, + CGBuilderTy &Builder); /// Emit call to \c llvm.dbg.declare for an imported variable /// declaration in a block. @@ -463,14 +451,10 @@ public: llvm::DIMacroFile *CreateTempMacroFile(llvm::DIMacroFile *Parent, SourceLocation LineLoc, SourceLocation FileLoc); - private: /// Emit call to llvm.dbg.declare for a variable declaration. - /// Returns a pointer to the DILocalVariable associated with the - /// llvm.dbg.declare, or nullptr otherwise. - llvm::DILocalVariable *EmitDeclare(const VarDecl *decl, llvm::Value *AI, - llvm::Optional ArgNo, - CGBuilderTy &Builder); + void EmitDeclare(const VarDecl *decl, llvm::Value *AI, + llvm::Optional ArgNo, CGBuilderTy &Builder); /// Build up structure info for the byref. See \a BuildByRefType. llvm::DIType *EmitTypeForVarWithBlocksAttr(const VarDecl *VD, diff --git a/lib/CodeGen/CGDecl.cpp b/lib/CodeGen/CGDecl.cpp index 6a2004828f..04585a8afb 100644 --- a/lib/CodeGen/CGDecl.cpp +++ b/lib/CodeGen/CGDecl.cpp @@ -955,58 +955,6 @@ void CodeGenFunction::EmitLifetimeEnd(llvm::Value *Size, llvm::Value *Addr) { C->setDoesNotThrow(); } -void CodeGenFunction::EmitAndRegisterVariableArrayDimensions( - CGDebugInfo *DI, const VarDecl &D, bool EmitDebugInfo) { - // For each dimension stores its QualType and corresponding - // size-expression Value. - SmallVector Dimensions; - - // Break down the array into individual dimensions. - QualType Type1D = D.getType(); - while (getContext().getAsVariableArrayType(Type1D)) { - auto VlaSize = getVLAElements1D(Type1D); - if (auto *C = dyn_cast(VlaSize.NumElts)) - Dimensions.emplace_back(C, Type1D.getUnqualifiedType()); - else { - auto SizeExprAddr = - CreateDefaultAlignTempAlloca(VlaSize.NumElts->getType(), "vla_expr"); - Builder.CreateStore(VlaSize.NumElts, SizeExprAddr); - Dimensions.emplace_back(SizeExprAddr.getPointer(), - Type1D.getUnqualifiedType()); - } - Type1D = VlaSize.Type; - } - - if (!EmitDebugInfo) - return; - - // Register each dimension's size-expression with a DILocalVariable, - // so that it can be used by CGDebugInfo when instantiating a DISubrange - // to describe this array. - for (auto &VlaSize : Dimensions) { - llvm::Metadata *MD; - if (auto *C = dyn_cast(VlaSize.NumElts)) - MD = llvm::ConstantAsMetadata::get(C); - else { - // Create an artificial VarDecl to generate debug info for. - IdentifierInfo &NameIdent = getContext().Idents.getOwn( - cast(VlaSize.NumElts)->getName()); - auto VlaExprTy = VlaSize.NumElts->getType()->getPointerElementType(); - auto QT = getContext().getIntTypeForBitwidth( - VlaExprTy->getScalarSizeInBits(), false); - auto *ArtificialDecl = VarDecl::Create( - getContext(), const_cast(D.getDeclContext()), - D.getLocation(), D.getLocation(), &NameIdent, QT, - getContext().CreateTypeSourceInfo(QT), SC_Auto); - - MD = DI->EmitDeclareOfAutoVariable(ArtificialDecl, VlaSize.NumElts, - Builder); - } - assert(MD && "No Size expression debug node created"); - DI->registerVLASizeExpression(VlaSize.Type, MD); - } -} - /// EmitAutoVarAlloca - Emit the alloca and debug information for a /// local variable. Does not emit initialization or destruction. CodeGenFunction::AutoVarEmission @@ -1027,10 +975,6 @@ CodeGenFunction::EmitAutoVarAlloca(const VarDecl &D) { if (Ty->isVariablyModifiedType()) EmitVariablyModifiedType(Ty); - auto *DI = getDebugInfo(); - bool EmitDebugInfo = DI && CGM.getCodeGenOpts().getDebugInfo() >= - codegenoptions::LimitedDebugInfo; - Address address = Address::invalid(); if (Ty->isConstantSizeType()) { bool NRVO = getLangOpts().ElideConstructors && @@ -1164,26 +1108,28 @@ CodeGenFunction::EmitAutoVarAlloca(const VarDecl &D) { pushStackRestore(NormalCleanup, Stack); } - auto VlaSize = getVLASize(Ty); - llvm::Type *llvmTy = ConvertTypeForMem(VlaSize.Type); + llvm::Value *elementCount; + QualType elementType; + std::tie(elementCount, elementType) = getVLASize(Ty); - // Allocate memory for the array. - address = CreateTempAlloca(llvmTy, alignment, "vla", VlaSize.NumElts); + llvm::Type *llvmTy = ConvertTypeForMem(elementType); - // If we have debug info enabled, properly describe the VLA dimensions for - // this type by registering the vla size expression for each of the - // dimensions. - EmitAndRegisterVariableArrayDimensions(DI, D, EmitDebugInfo); + // Allocate memory for the array. + address = CreateTempAlloca(llvmTy, alignment, "vla", elementCount); } setAddrOfLocalVar(&D, address); emission.Addr = address; // Emit debug info for local var declaration. - if (EmitDebugInfo && HaveInsertPoint()) { - DI->setLocation(D.getLocation()); - (void)DI->EmitDeclareOfAutoVariable(&D, address.getPointer(), Builder); - } + if (HaveInsertPoint()) + if (CGDebugInfo *DI = getDebugInfo()) { + if (CGM.getCodeGenOpts().getDebugInfo() >= + codegenoptions::LimitedDebugInfo) { + DI->setLocation(D.getLocation()); + DI->EmitDeclareOfAutoVariable(&D, address.getPointer(), Builder); + } + } if (D.hasAttr()) EmitVarAnnotations(&D, address.getPointer()); diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp index d8fc270b65..73354cdf85 100644 --- a/lib/CodeGen/CGExpr.cpp +++ b/lib/CodeGen/CGExpr.cpp @@ -873,7 +873,7 @@ static llvm::Value *getArrayIndexingBound( if (const auto *CAT = dyn_cast(AT)) return CGF.Builder.getInt(CAT->getSize()); else if (const auto *VAT = dyn_cast(AT)) - return CGF.getVLASize(VAT).NumElts; + return CGF.getVLASize(VAT).first; // Ignore pass_object_size here. It's not applicable on decayed pointers. } } @@ -3313,7 +3313,7 @@ LValue CodeGenFunction::EmitArraySubscriptExpr(const ArraySubscriptExpr *E, auto *Idx = EmitIdxAfterBase(/*Promote*/true); // The element count here is the total number of non-VLA elements. - llvm::Value *numElements = getVLASize(vla).NumElts; + llvm::Value *numElements = getVLASize(vla).first; // Effectively, the multiply by the VLA size is part of the GEP. // GEP indexes are signed, and scaling an index isn't permitted to @@ -3547,7 +3547,7 @@ LValue CodeGenFunction::EmitOMPArraySectionExpr(const OMPArraySectionExpr *E, emitOMPArraySectionBase(*this, E->getBase(), BaseInfo, TBAAInfo, BaseTy, VLA->getElementType(), IsLowerBound); // The element count here is the total number of non-VLA elements. - llvm::Value *NumElements = getVLASize(VLA).NumElts; + llvm::Value *NumElements = getVLASize(VLA).first; // Effectively, the multiply by the VLA size is part of the GEP. // GEP indexes are signed, and scaling an index isn't permitted to diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp index 2a0dd4a410..668c572942 100644 --- a/lib/CodeGen/CGExprScalar.cpp +++ b/lib/CodeGen/CGExprScalar.cpp @@ -1973,7 +1973,7 @@ ScalarExprEmitter::EmitScalarPrePostIncDec(const UnaryOperator *E, LValue LV, // VLA types don't have constant size. if (const VariableArrayType *vla = CGF.getContext().getAsVariableArrayType(type)) { - llvm::Value *numElts = CGF.getVLASize(vla).NumElts; + llvm::Value *numElts = CGF.getVLASize(vla).first; if (!isInc) numElts = Builder.CreateNSWNeg(numElts, "vla.negsize"); if (CGF.getLangOpts().isSignedOverflowDefined()) value = Builder.CreateGEP(value, numElts, "vla.inc"); @@ -2271,13 +2271,16 @@ ScalarExprEmitter::VisitUnaryExprOrTypeTraitExpr( CGF.EmitIgnoredExpr(E->getArgumentExpr()); } - auto VlaSize = CGF.getVLASize(VAT); - llvm::Value *size = VlaSize.NumElts; + QualType eltType; + llvm::Value *numElts; + std::tie(numElts, eltType) = CGF.getVLASize(VAT); + + llvm::Value *size = numElts; // Scale the number of non-VLA elements by the non-VLA element size. - CharUnits eltSize = CGF.getContext().getTypeSizeInChars(VlaSize.Type); + CharUnits eltSize = CGF.getContext().getTypeSizeInChars(eltType); if (!eltSize.isOne()) - size = CGF.Builder.CreateNUWMul(CGF.CGM.getSize(eltSize), size); + size = CGF.Builder.CreateNUWMul(CGF.CGM.getSize(eltSize), numElts); return size; } @@ -2764,7 +2767,7 @@ static Value *emitPointerArithmetic(CodeGenFunction &CGF, if (const VariableArrayType *vla = CGF.getContext().getAsVariableArrayType(elementType)) { // The element count here is the total number of non-VLA elements. - llvm::Value *numElements = CGF.getVLASize(vla).NumElts; + llvm::Value *numElements = CGF.getVLASize(vla).first; // Effectively, the multiply by the VLA size is part of the GEP. // GEP indexes are signed, and scaling an index isn't permitted to @@ -2959,9 +2962,10 @@ Value *ScalarExprEmitter::EmitSub(const BinOpInfo &op) { // For a variable-length array, this is going to be non-constant. if (const VariableArrayType *vla = CGF.getContext().getAsVariableArrayType(elementType)) { - auto VlaSize = CGF.getVLASize(vla); - elementType = VlaSize.Type; - divisor = VlaSize.NumElts; + llvm::Value *numElements; + std::tie(numElements, elementType) = CGF.getVLASize(vla); + + divisor = numElements; // Scale the number of non-VLA elements by the non-VLA element size. CharUnits eltSize = CGF.getContext().getTypeSizeInChars(elementType); diff --git a/lib/CodeGen/CGOpenMPRuntime.cpp b/lib/CodeGen/CGOpenMPRuntime.cpp index 1eae838ed9..e85590bb42 100644 --- a/lib/CodeGen/CGOpenMPRuntime.cpp +++ b/lib/CodeGen/CGOpenMPRuntime.cpp @@ -5154,7 +5154,7 @@ void CGOpenMPRuntime::emitReduction(CodeGenFunction &CGF, SourceLocation Loc, llvm::Value *Size = CGF.Builder.CreateIntCast( CGF.getVLASize( CGF.getContext().getAsVariableArrayType((*IPriv)->getType())) - .NumElts, + .first, CGF.SizeTy, /*isSigned=*/false); CGF.Builder.CreateStore(CGF.Builder.CreateIntToPtr(Size, CGF.VoidPtrTy), Elem); diff --git a/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp b/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp index 674e843c99..7da8915c84 100644 --- a/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp +++ b/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp @@ -2232,7 +2232,7 @@ void CGOpenMPRuntimeNVPTX::emitReduction( llvm::Value *Size = CGF.Builder.CreateIntCast( CGF.getVLASize( CGF.getContext().getAsVariableArrayType((*IPriv)->getType())) - .NumElts, + .first, CGF.SizeTy, /*isSigned=*/false); CGF.Builder.CreateStore(CGF.Builder.CreateIntToPtr(Size, CGF.VoidPtrTy), Elem); diff --git a/lib/CodeGen/CGStmtOpenMP.cpp b/lib/CodeGen/CGStmtOpenMP.cpp index 052ebcaf38..fb919d7b02 100644 --- a/lib/CodeGen/CGStmtOpenMP.cpp +++ b/lib/CodeGen/CGStmtOpenMP.cpp @@ -237,10 +237,9 @@ llvm::Value *CodeGenFunction::getTypeSize(QualType Ty) { if (SizeInChars.isZero()) { // getTypeSizeInChars() returns 0 for a VLA. while (auto *VAT = C.getAsVariableArrayType(Ty)) { - auto VlaSize = getVLASize(VAT); - Ty = VlaSize.Type; - Size = Size ? Builder.CreateNUWMul(Size, VlaSize.NumElts) - : VlaSize.NumElts; + llvm::Value *ArraySize; + std::tie(ArraySize, Ty) = getVLASize(VAT); + Size = Size ? Builder.CreateNUWMul(Size, ArraySize) : ArraySize; } SizeInChars = C.getTypeSizeInChars(Ty); if (SizeInChars.isZero()) diff --git a/lib/CodeGen/CodeGenFunction.cpp b/lib/CodeGen/CodeGenFunction.cpp index a7591b1045..e62d3e75b7 100644 --- a/lib/CodeGen/CodeGenFunction.cpp +++ b/lib/CodeGen/CodeGenFunction.cpp @@ -1758,9 +1758,12 @@ CodeGenFunction::EmitNullInitialization(Address DestPtr, QualType Ty) { if (const VariableArrayType *vlaType = dyn_cast_or_null( getContext().getAsArrayType(Ty))) { - auto VlaSize = getVLASize(vlaType); - SizeVal = VlaSize.NumElts; - CharUnits eltSize = getContext().getTypeSizeInChars(VlaSize.Type); + QualType eltType; + llvm::Value *numElts; + std::tie(numElts, eltType) = getVLASize(vlaType); + + SizeVal = numElts; + CharUnits eltSize = getContext().getTypeSizeInChars(eltType); if (!eltSize.isOne()) SizeVal = Builder.CreateNUWMul(SizeVal, CGM.getSize(eltSize)); vla = vlaType; @@ -1843,7 +1846,7 @@ llvm::Value *CodeGenFunction::emitArrayLength(const ArrayType *origArrayType, // this is the size of the VLA in bytes, not its size in elements. llvm::Value *numVLAElements = nullptr; if (isa(arrayType)) { - numVLAElements = getVLASize(cast(arrayType)).NumElts; + numVLAElements = getVLASize(cast(arrayType)).first; // Walk into all VLAs. This doesn't require changes to addr, // which has type T* where T is the first non-VLA element type. @@ -1924,13 +1927,14 @@ llvm::Value *CodeGenFunction::emitArrayLength(const ArrayType *origArrayType, return numElements; } -CodeGenFunction::VlaSizePair CodeGenFunction::getVLASize(QualType type) { +std::pair +CodeGenFunction::getVLASize(QualType type) { const VariableArrayType *vla = getContext().getAsVariableArrayType(type); assert(vla && "type was not a variable array type!"); return getVLASize(vla); } -CodeGenFunction::VlaSizePair +std::pair CodeGenFunction::getVLASize(const VariableArrayType *type) { // The number of elements so far; always size_t. llvm::Value *numElements = nullptr; @@ -1951,22 +1955,7 @@ CodeGenFunction::getVLASize(const VariableArrayType *type) { } } while ((type = getContext().getAsVariableArrayType(elementType))); - return { numElements, elementType }; -} - -CodeGenFunction::VlaSizePair -CodeGenFunction::getVLAElements1D(QualType type) { - const VariableArrayType *vla = getContext().getAsVariableArrayType(type); - assert(vla && "type was not a variable array type!"); - return getVLAElements1D(vla); -} - -CodeGenFunction::VlaSizePair -CodeGenFunction::getVLAElements1D(const VariableArrayType *Vla) { - llvm::Value *VlaSize = VLASizeMap[Vla->getSizeExpr()]; - assert(VlaSize && "no size for VLA!"); - assert(VlaSize->getType() == SizeTy); - return { VlaSize, Vla->getElementType() }; + return std::pair(numElements, elementType); } void CodeGenFunction::EmitVariablyModifiedType(QualType type) { diff --git a/lib/CodeGen/CodeGenFunction.h b/lib/CodeGen/CodeGenFunction.h index 35ecf4dbee..75071a8e32 100644 --- a/lib/CodeGen/CodeGenFunction.h +++ b/lib/CodeGen/CodeGenFunction.h @@ -2198,24 +2198,12 @@ public: /// This function can be called with a null (unreachable) insert point. void EmitVariablyModifiedType(QualType Ty); - struct VlaSizePair { - llvm::Value *NumElts; - QualType Type; - - VlaSizePair(llvm::Value *NE, QualType T) : NumElts(NE), Type(T) {} - }; - - /// Return the number of elements for a single dimension - /// for the given array type. - VlaSizePair getVLAElements1D(const VariableArrayType *vla); - VlaSizePair getVLAElements1D(QualType vla); - - /// Returns an LLVM value that corresponds to the size, + /// getVLASize - Returns an LLVM value that corresponds to the size, /// in non-variably-sized elements, of a variable length array type, /// plus that largest non-variably-sized element type. Assumes that /// the type has already been emitted with EmitVariablyModifiedType. - VlaSizePair getVLASize(const VariableArrayType *vla); - VlaSizePair getVLASize(QualType vla); + std::pair getVLASize(const VariableArrayType *vla); + std::pair getVLASize(QualType vla); /// LoadCXXThis - Load the value of 'this'. This function is only valid while /// generating code for an C++ member function. @@ -2523,15 +2511,6 @@ public: void emitAutoVarTypeCleanup(const AutoVarEmission &emission, QualType::DestructionKind dtorKind); - /// Emits the alloca and debug information for the size expressions for each - /// dimension of an array. It registers the association of its (1-dimensional) - /// QualTypes and size expression's debug node, so that CGDebugInfo can - /// reference this node when creating the DISubrange object to describe the - /// array types. - void EmitAndRegisterVariableArrayDimensions(CGDebugInfo *DI, - const VarDecl &D, - bool EmitDebugInfo); - void EmitStaticVarDecl(const VarDecl &D, llvm::GlobalValue::LinkageTypes Linkage); diff --git a/test/CodeGen/debug-info-vla.c b/test/CodeGen/debug-info-vla.c index 35a219b955..7928ca7613 100644 --- a/test/CodeGen/debug-info-vla.c +++ b/test/CodeGen/debug-info-vla.c @@ -2,11 +2,9 @@ void testVLAwithSize(int s) { -// CHECK-DAG: dbg.declare({{.*}} %vla_expr, metadata ![[VLAEXPR:[0-9]+]] -// CHECK-DAG: dbg.declare({{.*}} %vla, metadata ![[VAR:[0-9]+]] -// CHECK-DAG: ![[VLAEXPR]] = !DILocalVariable(name: "vla_expr" -// CHECK-DAG: ![[VAR]] = !DILocalVariable(name: "vla",{{.*}} line: [[@LINE+2]] -// CHECK-DAG: !DISubrange(count: ![[VLAEXPR]]) +// CHECK: dbg.declare +// CHECK: dbg.declare({{.*}}, metadata ![[VAR:.*]], metadata !DIExpression()) +// CHECK: ![[VAR]] = !DILocalVariable(name: "vla",{{.*}} line: [[@LINE+1]] int vla[s]; int i; for (i = 0; i < s; i++) { diff --git a/test/CodeGenCXX/debug-info-vla.cpp b/test/CodeGenCXX/debug-info-vla.cpp index f26040d2e5..88f3a3f55d 100644 --- a/test/CodeGenCXX/debug-info-vla.cpp +++ b/test/CodeGenCXX/debug-info-vla.cpp @@ -13,10 +13,8 @@ int (*fp)(int[][*]) = nullptr; // CHECK: [[ELEM_TYPE]] = !{[[NOCOUNT:.*]]} // CHECK: [[NOCOUNT]] = !DISubrange(count: -1) // -// CHECK: [[VAR:![0-9]+]] = !DILocalVariable(name: "vla_expr" // CHECK: !DICompositeType(tag: DW_TAG_array_type, // CHECK-NOT: size: // CHECK-SAME: elements: [[ELEM_TYPE:![0-9]+]] -// CHECK: [[ELEM_TYPE]] = !{[[THREE:.*]], [[VARRANGE:![0-9]+]]} +// CHECK: [[ELEM_TYPE]] = !{[[THREE:.*]], [[NOCOUNT]]} // CHECK: [[THREE]] = !DISubrange(count: 3) -// CHECK: [[VARRANGE]] = !DISubrange(count: [[VAR]]) diff --git a/test/CodeGenCXX/vla-consruct.cpp b/test/CodeGenCXX/vla-consruct.cpp index 87191fe99d..fd8314a5d7 100644 --- a/test/CodeGenCXX/vla-consruct.cpp +++ b/test/CodeGenCXX/vla-consruct.cpp @@ -21,8 +21,6 @@ void test(int n) { // CHECK: define void {{.*test.*}}(i32 [[n:%.+]]) # // CHECK: [[n_addr:%.+]] = alloca // CHECK-NEXT: [[saved_stack:%.+]] = alloca - // CHECK-NEXT: [[vla_expr:%.+]] = alloca i64, align 8 - // CHECK-NEXT: [[vla_expr1:%.+]] = alloca i64, align 8 // CHECK-NEXT: [[sizeof_S:%.+]] = alloca // CHECK-NEXT: [[sizeof_array_t_0_0:%.+]] = alloca // CHECK-NEXT: [[sizeof_array_t_0:%.+]] = alloca @@ -39,8 +37,6 @@ void test(int n) { // CHECK-NEXT: store i8* [[t4]], i8** [[saved_stack]] // CHECK-NEXT: [[t5:%.+]] = mul nuw i64 [[t1]], [[t3]] // CHECK-NEXT: [[vla:%.+]] = alloca [[struct_S]], i64 [[t5]] - // CHECK-NEXT: store i64 [[t1]], i64* [[vla_expr]] - // CHECK-NEXT: store i64 [[t3]], i64* [[vla_expr1]] // CHECK-NEXT: [[t6:%.+]] = mul nuw i64 [[t1]], [[t3]] // CHECK-NEXT: [[isempty:%.+]] = icmp eq i64 [[t6]], 0 // CHECK-NEXT: br i1 [[isempty]], label %[[arrayctor_cont:.+]], label %[[new_ctorloop:.+]] diff --git a/test/CodeGenObjC/arc.m b/test/CodeGenObjC/arc.m index 243de3a4fb..8772ac5d6d 100644 --- a/test/CodeGenObjC/arc.m +++ b/test/CodeGenObjC/arc.m @@ -538,7 +538,6 @@ void test20(unsigned n) { // CHECK-LABEL: define void @test20 // CHECK: [[N:%.*]] = alloca i32, align 4 // CHECK-NEXT: [[SAVED_STACK:%.*]] = alloca i8* - // CHECK-NEXT: [[VLA_EXPR:%.*]] = alloca i64, align 8 // CHECK-NEXT: store i32 {{%.*}}, i32* [[N]], align 4 id x[n]; @@ -554,9 +553,6 @@ void test20(unsigned n) { // Allocate the VLA. // CHECK-NEXT: [[VLA:%.*]] = alloca i8*, i64 [[DIM]], align 16 - // Store the VLA #elements expression. - // CHECK-NEXT: store i64 %1, i64* [[VLA_EXPR]], align 8 - // Zero-initialize. // CHECK-NEXT: [[T0:%.*]] = bitcast i8** [[VLA]] to i8* // CHECK-NEXT: [[T1:%.*]] = mul nuw i64 [[DIM]], 8 @@ -583,7 +579,6 @@ void test21(unsigned n) { // CHECK-LABEL: define void @test21 // CHECK: [[N:%.*]] = alloca i32, align 4 // CHECK-NEXT: [[SAVED_STACK:%.*]] = alloca i8* - // CHECK-NEXT: [[VLA_EXPR:%.*]] = alloca i64, align 8 // CHECK-NEXT: store i32 {{%.*}}, i32* [[N]], align 4 id x[2][n][3]; @@ -600,9 +595,6 @@ void test21(unsigned n) { // CHECK-NEXT: [[T0:%.*]] = mul nuw i64 2, [[DIM]] // CHECK-NEXT: [[VLA:%.*]] = alloca [3 x i8*], i64 [[T0]], align 16 - // Store the VLA #elements expression. - // CHECK-NEXT: store i64 %1, i64* [[VLA_EXPR]], align 8 - // Zero-initialize. // CHECK-NEXT: [[T0:%.*]] = bitcast [3 x i8*]* [[VLA]] to i8* // CHECK-NEXT: [[T1:%.*]] = mul nuw i64 2, [[DIM]] diff --git a/test/OpenMP/target_codegen.cpp b/test/OpenMP/target_codegen.cpp index 3519290438..3671f44e58 100644 --- a/test/OpenMP/target_codegen.cpp +++ b/test/OpenMP/target_codegen.cpp @@ -511,7 +511,6 @@ int bar(int n){ // CHECK-64: store i32 %{{.+}}, i32* [[B_ADDR]], // CHECK-64: [[B_CVAL:%.+]] = load i[[SZ]], i[[SZ]]* [[B_CADDR]], -// CHECK-32: store i32 %{{.+}}, i32* %vla_expr // CHECK-32: store i32 %{{.+}}, i32* [[B_ADDR:%.+]], // CHECK-32: [[B_CVAL:%.+]] = load i[[SZ]], i[[SZ]]* [[B_ADDR]], diff --git a/test/OpenMP/target_parallel_codegen.cpp b/test/OpenMP/target_parallel_codegen.cpp index 7270bf7fdf..7a76317efe 100644 --- a/test/OpenMP/target_parallel_codegen.cpp +++ b/test/OpenMP/target_parallel_codegen.cpp @@ -528,7 +528,6 @@ int bar(int n){ // CHECK-64: store i32 %{{.+}}, i32* [[B_ADDR]], // CHECK-64: [[B_CVAL:%.+]] = load i[[SZ]], i[[SZ]]* [[B_CADDR]], -// CHECK-32: store i32 %{{.+}}, i32* %vla_expr // CHECK-32: store i32 %{{.+}}, i32* [[B_ADDR:%.+]], // CHECK-32: [[B_CVAL:%.+]] = load i[[SZ]], i[[SZ]]* [[B_ADDR]], diff --git a/test/OpenMP/target_parallel_for_codegen.cpp b/test/OpenMP/target_parallel_for_codegen.cpp index 73cc8b42fb..1bd9abb4d6 100644 --- a/test/OpenMP/target_parallel_for_codegen.cpp +++ b/test/OpenMP/target_parallel_for_codegen.cpp @@ -555,7 +555,6 @@ int bar(int n){ // CHECK-64: store i32 %{{.+}}, i32* [[B_ADDR]], // CHECK-64: [[B_CVAL:%.+]] = load i[[SZ]], i[[SZ]]* [[B_CADDR]], -// CHECK-32: store i32 %{{.+}}, i32* %vla_expr // CHECK-32: store i32 %{{.+}}, i32* [[B_ADDR:%.+]], // CHECK-32: [[B_CVAL:%.+]] = load i[[SZ]], i[[SZ]]* [[B_ADDR]], diff --git a/test/OpenMP/target_parallel_for_simd_codegen.cpp b/test/OpenMP/target_parallel_for_simd_codegen.cpp index 0f49261eb1..3da6b81d09 100644 --- a/test/OpenMP/target_parallel_for_simd_codegen.cpp +++ b/test/OpenMP/target_parallel_for_simd_codegen.cpp @@ -555,7 +555,6 @@ int bar(int n){ // CHECK-64: store i32 %{{.+}}, i32* [[B_ADDR]], // CHECK-64: [[B_CVAL:%.+]] = load i[[SZ]], i[[SZ]]* [[B_CADDR]], -// CHECK-32: store i32 %{{.+}}, i32* %vla_expr // CHECK-32: store i32 %{{.+}}, i32* [[B_ADDR:%.+]], // CHECK-32: [[B_CVAL:%.+]] = load i[[SZ]], i[[SZ]]* [[B_ADDR]], diff --git a/test/OpenMP/target_simd_codegen.cpp b/test/OpenMP/target_simd_codegen.cpp index 074ecb2632..7ed02435e7 100644 --- a/test/OpenMP/target_simd_codegen.cpp +++ b/test/OpenMP/target_simd_codegen.cpp @@ -478,7 +478,6 @@ int bar(int n){ // CHECK-64: store i32 %{{.+}}, i32* [[B_ADDR]], // CHECK-64: [[B_CVAL:%.+]] = load i[[SZ]], i[[SZ]]* [[B_CADDR]], -// CHECK-32: store i32 %{{.+}}, i32* %vla_expr // CHECK-32: store i32 %{{.+}}, i32* [[B_ADDR:%.+]], // CHECK-32: [[B_CVAL:%.+]] = load i[[SZ]], i[[SZ]]* [[B_ADDR]], diff --git a/test/OpenMP/target_teams_codegen.cpp b/test/OpenMP/target_teams_codegen.cpp index 1d6385b9c1..349c0de2a4 100644 --- a/test/OpenMP/target_teams_codegen.cpp +++ b/test/OpenMP/target_teams_codegen.cpp @@ -553,7 +553,6 @@ int bar(int n){ // CHECK-64: store i32 %{{.+}}, i32* [[B_ADDR]], // CHECK-64: [[B_CVAL:%.+]] = load i[[SZ]], i[[SZ]]* [[B_CADDR]], -// CHECK-32: store i32 %{{.+}}, i32* %vla_expr // CHECK-32: store i32 %{{.+}}, i32* [[B_ADDR:%.+]], // CHECK-32: [[B_CVAL:%.+]] = load i[[SZ]], i[[SZ]]* [[B_ADDR]], diff --git a/test/OpenMP/target_teams_distribute_codegen.cpp b/test/OpenMP/target_teams_distribute_codegen.cpp index cc12d40f5c..a033bfe2d3 100644 --- a/test/OpenMP/target_teams_distribute_codegen.cpp +++ b/test/OpenMP/target_teams_distribute_codegen.cpp @@ -564,7 +564,6 @@ int bar(int n){ // CHECK-64: store i32 %{{.+}}, i32* [[B_ADDR]], // CHECK-64: [[B_CVAL:%.+]] = load i[[SZ]], i[[SZ]]* [[B_CADDR]], -// CHECK-32: store i32 %{{.+}}, i32* %vla_expr // CHECK-32: store i32 %{{.+}}, i32* [[B_ADDR:%.+]], // CHECK-32: [[B_CVAL:%.+]] = load i[[SZ]], i[[SZ]]* [[B_ADDR]], diff --git a/test/OpenMP/target_teams_distribute_simd_codegen.cpp b/test/OpenMP/target_teams_distribute_simd_codegen.cpp index 695f386308..3553aa24e6 100644 --- a/test/OpenMP/target_teams_distribute_simd_codegen.cpp +++ b/test/OpenMP/target_teams_distribute_simd_codegen.cpp @@ -553,7 +553,6 @@ int bar(int n){ // CHECK-64: store i32 %{{.+}}, i32* [[B_ADDR]], // CHECK-64: [[B_CVAL:%.+]] = load i[[SZ]], i[[SZ]]* [[B_CADDR]], -// CHECK-32: store i32 %{{.+}}, i32* %vla_expr // CHECK-32: store i32 %{{.+}}, i32* [[B_ADDR:%.+]], // CHECK-32: [[B_CVAL:%.+]] = load i[[SZ]], i[[SZ]]* [[B_ADDR]],