[llvm] r284678 - DebugInfo: preparation to implement DW_AT_alignment

Peter Collingbourne via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 20 18:52:04 PDT 2016


Sorry, never mind, Benjamin did it in r284707.

Peter

On Thu, Oct 20, 2016 at 4:03 PM, Peter Collingbourne <peter at pcc.me.uk>
wrote:

> Hi Victor, can you please also update the Go bindings?
>
> # llvm.org/llvm/bindings/go/llvm
> [...]/llvm/bindings/go/llvm/DIBuilderBindings.cpp:113:65: error: too many
> arguments to function call, expected 3, have 4
> [...]/llvm/include/llvm/IR/DIBuilder.h:124:5: note: 'createBasicType'
> declared here
>
>
> On Wed, Oct 19, 2016 at 5:13 PM, Victor Leschuk via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>
>> Author: vleschuk
>> Date: Wed Oct 19 19:13:12 2016
>> New Revision: 284678
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=284678&view=rev
>> Log:
>> DebugInfo: preparation to implement DW_AT_alignment
>>
>>  - Add alignment attribute to DIVariable family
>>  - Modify bitcode format to match new DIVariable representation
>>  - Update tests to match these changes (also add bitcode upgrade test)
>>  - Expect that frontend passes non-zero align value only when it is not
>> default
>>    (was forcibly aligned by alignas()/_Alignas()/__atribute__(aligned())
>>
>> Differential Revision: https://reviews.llvm.org/D25073
>>
>> Added:
>>     llvm/trunk/test/Bitcode/dilocalvariable-3.9.ll
>>     llvm/trunk/test/Bitcode/dilocalvariable-3.9.ll.bc
>> Modified:
>>     llvm/trunk/include/llvm/IR/DIBuilder.h
>>     llvm/trunk/include/llvm/IR/DebugInfoMetadata.h
>>     llvm/trunk/lib/AsmParser/LLParser.cpp
>>     llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
>>     llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp
>>     llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
>>     llvm/trunk/lib/IR/AsmWriter.cpp
>>     llvm/trunk/lib/IR/DIBuilder.cpp
>>     llvm/trunk/lib/IR/DebugInfoMetadata.cpp
>>     llvm/trunk/lib/IR/LLVMContextImpl.h
>>     llvm/trunk/test/Assembler/diglobalvariable.ll
>>     llvm/trunk/test/Assembler/dilocalvariable.ll
>>     llvm/trunk/test/DebugInfo/AArch64/bitfields.ll
>>     llvm/trunk/test/DebugInfo/ARM/big-endian-bitfield.ll
>>     llvm/trunk/test/DebugInfo/COFF/bitfields.ll
>>     llvm/trunk/test/DebugInfo/X86/bitfields-dwarf4.ll
>>     llvm/trunk/test/DebugInfo/X86/bitfields.ll
>>     llvm/trunk/test/DebugInfo/X86/debug-info-packed-struct.ll
>>     llvm/trunk/unittests/IR/MetadataTest.cpp
>>     llvm/trunk/unittests/Transforms/Utils/Cloning.cpp
>>
>> Modified: llvm/trunk/include/llvm/IR/DIBuilder.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/
>> IR/DIBuilder.h?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/include/llvm/IR/DIBuilder.h (original)
>> +++ llvm/trunk/include/llvm/IR/DIBuilder.h Wed Oct 19 19:13:12 2016
>> @@ -120,10 +120,9 @@ namespace llvm {
>>      /// type.
>>      /// \param Name        Type name.
>>      /// \param SizeInBits  Size of the type.
>> -    /// \param AlignInBits Type alignment.
>>      /// \param Encoding    DWARF encoding code, e.g. dwarf::DW_ATE_float.
>>      DIBasicType *createBasicType(StringRef Name, uint64_t SizeInBits,
>> -                                 uint32_t AlignInBits, unsigned
>> Encoding);
>> +                                 unsigned Encoding);
>>
>>      /// Create debugging information entry for a qualified
>>      /// type, e.g. 'const int'.
>> @@ -209,7 +208,7 @@ namespace llvm {
>>      /// \param Ty                  Parent type.
>>      DIDerivedType *createBitFieldMemberType(
>>          DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNo,
>> -        uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
>> +        uint64_t SizeInBits, uint64_t OffsetInBits,
>>          uint64_t StorageOffsetInBits, DINode::DIFlags Flags, DIType *Ty);
>>
>>      /// Create debugging information entry for a
>> @@ -221,10 +220,12 @@ namespace llvm {
>>      /// \param Ty         Type of the static member.
>>      /// \param Flags      Flags to encode member attribute, e.g. private.
>>      /// \param Val        Const initializer of the member.
>> +    /// \param AlignInBits  Member alignment.
>>      DIDerivedType *createStaticMemberType(DIScope *Scope, StringRef
>> Name,
>>                                            DIFile *File, unsigned LineNo,
>>                                            DIType *Ty, DINode::DIFlags
>> Flags,
>> -                                          llvm::Constant *Val);
>> +                                          llvm::Constant *Val,
>> +                                          uint32_t AlignInBits = 0);
>>
>>      /// Create debugging information entry for Objective-C
>>      /// instance variable.
>> @@ -458,19 +459,22 @@ namespace llvm {
>>      /// \param Expr        The location of the global relative to the
>> attached
>>      ///                    GlobalVariable.
>>      /// \param Decl        Reference to the corresponding declaration.
>> +    /// \param AlignInBits Variable alignment(or 0 if no alignment attr
>> was
>> +    ///                    specified)
>>      DIGlobalVariable *createGlobalVariable(DIScope *Context, StringRef
>> Name,
>>                                             StringRef LinkageName, DIFile
>> *File,
>>                                             unsigned LineNo, DIType *Ty,
>>                                             bool isLocalToUnit,
>>                                             DIExpression *Expr = nullptr,
>> -                                           MDNode *Decl = nullptr);
>> +                                           MDNode *Decl = nullptr,
>> +                                           uint32_t AlignInBits = 0);
>>
>>      /// Identical to createGlobalVariable
>>      /// except that the resulting DbgNode is temporary and meant to be
>> RAUWed.
>>      DIGlobalVariable *createTempGlobalVariableFwdDecl(
>>          DIScope *Context, StringRef Name, StringRef LinkageName, DIFile
>> *File,
>>          unsigned LineNo, DIType *Ty, bool isLocalToUnit, DIExpression
>> *Expr,
>> -        MDNode *Decl = nullptr);
>> +        MDNode *Decl = nullptr, uint32_t AlignInBits = 0);
>>
>>      /// Create a new descriptor for an auto variable.  This is a local
>> variable
>>      /// that is not a subprogram parameter.
>> @@ -483,7 +487,8 @@ namespace llvm {
>>      DILocalVariable *
>>      createAutoVariable(DIScope *Scope, StringRef Name, DIFile *File,
>>                         unsigned LineNo, DIType *Ty, bool AlwaysPreserve
>> = false,
>> -                       DINode::DIFlags Flags = DINode::FlagZero);
>> +                       DINode::DIFlags Flags = DINode::FlagZero,
>> +                       uint32_t AlignInBits = 0);
>>
>>      /// Create a new descriptor for a parameter variable.
>>      ///
>>
>> Modified: llvm/trunk/include/llvm/IR/DebugInfoMetadata.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/
>> IR/DebugInfoMetadata.h?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/include/llvm/IR/DebugInfoMetadata.h (original)
>> +++ llvm/trunk/include/llvm/IR/DebugInfoMetadata.h Wed Oct 19 19:13:12
>> 2016
>> @@ -549,7 +549,8 @@ public:
>>
>>    unsigned getLine() const { return Line; }
>>    uint64_t getSizeInBits() const { return SizeInBits; }
>> -  uint64_t getAlignInBits() const { return AlignInBits; }
>> +  uint32_t getAlignInBits() const { return AlignInBits; }
>> +  uint32_t getAlignInBytes() const { return getAlignInBits() / CHAR_BIT;
>> }
>>    uint64_t getOffsetInBits() const { return OffsetInBits; }
>>    DIFlags getFlags() const { return Flags; }
>>
>> @@ -1826,11 +1827,13 @@ public:
>>  /// \brief Base class for variables.
>>  class DIVariable : public DINode {
>>    unsigned Line;
>> +  uint64_t AlignInBits;
>>
>>  protected:
>>    DIVariable(LLVMContext &C, unsigned ID, StorageType Storage, unsigned
>> Line,
>> -             ArrayRef<Metadata *> Ops)
>> -      : DINode(C, ID, Storage, dwarf::DW_TAG_variable, Ops), Line(Line)
>> {}
>> +             ArrayRef<Metadata *> Ops, uint64_t AlignInBits = 0)
>> +      : DINode(C, ID, Storage, dwarf::DW_TAG_variable, Ops), Line(Line),
>> +             AlignInBits(AlignInBits) {}
>>    ~DIVariable() = default;
>>
>>  public:
>> @@ -1839,6 +1842,8 @@ public:
>>    StringRef getName() const { return getStringOperand(1); }
>>    DIFile *getFile() const { return cast_or_null<DIFile>(getRawFile()); }
>>    DITypeRef getType() const { return DITypeRef(getRawType()); }
>> +  uint64_t getAlignInBits() const { return AlignInBits; }
>> +  uint64_t getAlignInBytes() const { return getAlignInBits() / CHAR_BIT;
>> }
>>
>>    StringRef getFilename() const {
>>      if (auto *F = getFile())
>> @@ -2026,9 +2031,9 @@ class DIGlobalVariable : public DIVariab
>>    bool IsDefinition;
>>
>>    DIGlobalVariable(LLVMContext &C, StorageType Storage, unsigned Line,
>> -                   bool IsLocalToUnit, bool IsDefinition,
>> +                   bool IsLocalToUnit, bool IsDefinition, uint64_t
>> AlignInBits,
>>                     ArrayRef<Metadata *> Ops)
>> -      : DIVariable(C, DIGlobalVariableKind, Storage, Line, Ops),
>> +      : DIVariable(C, DIGlobalVariableKind, Storage, Line, Ops,
>> AlignInBits),
>>          IsLocalToUnit(IsLocalToUnit), IsDefinition(IsDefinition) {}
>>    ~DIGlobalVariable() = default;
>>
>> @@ -2036,42 +2041,48 @@ class DIGlobalVariable : public DIVariab
>>    getImpl(LLVMContext &Context, DIScope *Scope, StringRef Name,
>>            StringRef LinkageName, DIFile *File, unsigned Line, DITypeRef
>> Type,
>>            bool IsLocalToUnit, bool IsDefinition, DIExpression *Expr,
>> -          DIDerivedType *StaticDataMemberDeclaration, StorageType
>> Storage,
>> -          bool ShouldCreate = true) {
>> +          DIDerivedType *StaticDataMemberDeclaration, uint64_t
>> AlignInBits,
>> +          StorageType Storage, bool ShouldCreate = true) {
>>      return getImpl(Context, Scope, getCanonicalMDString(Context, Name),
>>                     getCanonicalMDString(Context, LinkageName), File,
>> Line, Type,
>>                     IsLocalToUnit, IsDefinition, Expr,
>> -                   StaticDataMemberDeclaration, Storage, ShouldCreate);
>> +                   StaticDataMemberDeclaration, AlignInBits, Storage,
>> +                   ShouldCreate);
>>    }
>>    static DIGlobalVariable *
>>    getImpl(LLVMContext &Context, Metadata *Scope, MDString *Name,
>>            MDString *LinkageName, Metadata *File, unsigned Line, Metadata
>> *Type,
>>            bool IsLocalToUnit, bool IsDefinition, Metadata *Expr,
>> -          Metadata *StaticDataMemberDeclaration, StorageType Storage,
>> -          bool ShouldCreate = true);
>> +          Metadata *StaticDataMemberDeclaration, uint64_t AlignInBits,
>> +          StorageType Storage, bool ShouldCreate = true);
>>
>>    TempDIGlobalVariable cloneImpl() const {
>>      return getTemporary(getContext(), getScope(), getName(),
>> getLinkageName(),
>>                          getFile(), getLine(), getType(), isLocalToUnit(),
>>                          isDefinition(), getExpr(),
>> -                        getStaticDataMemberDeclaration());
>> +                        getStaticDataMemberDeclaration(),
>> getAlignInBits());
>>    }
>>
>>  public:
>>    DEFINE_MDNODE_GET(DIGlobalVariable,
>>                      (DIScope * Scope, StringRef Name, StringRef
>> LinkageName,
>>                       DIFile *File, unsigned Line, DITypeRef Type,
>> -                     bool IsLocalToUnit, bool IsDefinition, DIExpression
>> *Expr,
>> -                     DIDerivedType *StaticDataMemberDeclaration),
>> +                     bool IsLocalToUnit, bool IsDefinition,
>> +                     DIExpression *Expr,
>> +                     DIDerivedType *StaticDataMemberDeclaration,
>> +                     uint64_t AlignInBits),
>>                      (Scope, Name, LinkageName, File, Line, Type,
>> IsLocalToUnit,
>> -                     IsDefinition, Expr, StaticDataMemberDeclaration))
>> +                     IsDefinition, Expr, StaticDataMemberDeclaration,
>> +                     AlignInBits))
>>    DEFINE_MDNODE_GET(DIGlobalVariable,
>>                      (Metadata * Scope, MDString *Name, MDString
>> *LinkageName,
>>                       Metadata *File, unsigned Line, Metadata *Type,
>> -                     bool IsLocalToUnit, bool IsDefinition, Metadata
>> *Expr,
>> -                     Metadata *StaticDataMemberDeclaration),
>> +                     bool IsLocalToUnit, bool IsDefinition,
>> +                     Metadata *Expr, Metadata
>> *StaticDataMemberDeclaration,
>> +                     uint64_t AlignInBits),
>>                      (Scope, Name, LinkageName, File, Line, Type,
>> IsLocalToUnit,
>> -                     IsDefinition, Expr, StaticDataMemberDeclaration))
>> +                     IsDefinition, Expr, StaticDataMemberDeclaration,
>> +                     AlignInBits))
>>
>>    TempDIGlobalVariable clone() const { return cloneImpl(); }
>>
>> @@ -2109,9 +2120,10 @@ class DILocalVariable : public DIVariabl
>>    DIFlags Flags;
>>
>>    DILocalVariable(LLVMContext &C, StorageType Storage, unsigned Line,
>> -                  unsigned Arg, DIFlags Flags, ArrayRef<Metadata *> Ops)
>> -      : DIVariable(C, DILocalVariableKind, Storage, Line, Ops), Arg(Arg),
>> -        Flags(Flags) {
>> +                  unsigned Arg, DIFlags Flags, uint64_t AlignInBits,
>> +                  ArrayRef<Metadata *> Ops)
>> +      : DIVariable(C, DILocalVariableKind, Storage, Line, Ops,
>> AlignInBits),
>> +        Arg(Arg), Flags(Flags) {
>>      assert(Arg < (1 << 16) && "DILocalVariable: Arg out of range");
>>    }
>>    ~DILocalVariable() = default;
>> @@ -2119,33 +2131,34 @@ class DILocalVariable : public DIVariabl
>>    static DILocalVariable *getImpl(LLVMContext &Context, DIScope *Scope,
>>                                    StringRef Name, DIFile *File, unsigned
>> Line,
>>                                    DITypeRef Type, unsigned Arg, DIFlags
>> Flags,
>> -                                  StorageType Storage,
>> +                                  uint64_t AlignInBits, StorageType
>> Storage,
>>                                    bool ShouldCreate = true) {
>>      return getImpl(Context, Scope, getCanonicalMDString(Context, Name),
>> File,
>> -                   Line, Type, Arg, Flags, Storage, ShouldCreate);
>> +                   Line, Type, Arg, Flags, AlignInBits, Storage,
>> ShouldCreate);
>>    }
>>    static DILocalVariable *getImpl(LLVMContext &Context, Metadata *Scope,
>>                                    MDString *Name, Metadata *File,
>> unsigned Line,
>>                                    Metadata *Type, unsigned Arg, DIFlags
>> Flags,
>> -                                  StorageType Storage,
>> +                                  uint64_t AlignInBits, StorageType
>> Storage,
>>                                    bool ShouldCreate = true);
>>
>>    TempDILocalVariable cloneImpl() const {
>>      return getTemporary(getContext(), getScope(), getName(), getFile(),
>> -                        getLine(), getType(), getArg(), getFlags());
>> +                        getLine(), getType(), getArg(), getFlags(),
>> +                        getAlignInBits());
>>    }
>>
>>  public:
>>    DEFINE_MDNODE_GET(DILocalVariable,
>>                      (DILocalScope * Scope, StringRef Name, DIFile *File,
>>                       unsigned Line, DITypeRef Type, unsigned Arg,
>> -                     DIFlags Flags),
>> -                    (Scope, Name, File, Line, Type, Arg, Flags))
>> +                     DIFlags Flags, uint64_t AlignInBits),
>> +                    (Scope, Name, File, Line, Type, Arg, Flags,
>> AlignInBits))
>>    DEFINE_MDNODE_GET(DILocalVariable,
>>                      (Metadata * Scope, MDString *Name, Metadata *File,
>>                       unsigned Line, Metadata *Type, unsigned Arg,
>> -                     DIFlags Flags),
>> -                    (Scope, Name, File, Line, Type, Arg, Flags))
>> +                     DIFlags Flags, uint64_t AlignInBits),
>> +                    (Scope, Name, File, Line, Type, Arg, Flags,
>> AlignInBits))
>>
>>    TempDILocalVariable clone() const { return cloneImpl(); }
>>
>>
>> Modified: llvm/trunk/lib/AsmParser/LLParser.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser
>> /LLParser.cpp?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/AsmParser/LLParser.cpp (original)
>> +++ llvm/trunk/lib/AsmParser/LLParser.cpp Wed Oct 19 19:13:12 2016
>> @@ -4186,7 +4186,7 @@ bool LLParser::ParseDITemplateValueParam
>>  ///   ::= !DIGlobalVariable(scope: !0, name: "foo", linkageName: "foo",
>>  ///                         file: !1, line: 7, type: !2, isLocal: false,
>>  ///                         isDefinition: true, variable: i32* @foo,
>> -///                         declaration: !3)
>> +///                         declaration: !3, align: 8)
>>  bool LLParser::ParseDIGlobalVariable(MDNode *&Result, bool IsDistinct) {
>>  #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED)
>>       \
>>    REQUIRED(name, MDStringField, (/* AllowEmpty */ false));
>>        \
>> @@ -4198,22 +4198,26 @@ bool LLParser::ParseDIGlobalVariable(MDN
>>    OPTIONAL(isLocal, MDBoolField, );
>>       \
>>    OPTIONAL(isDefinition, MDBoolField, (true));
>>        \
>>    OPTIONAL(expr, MDField, );
>>        \
>> -  OPTIONAL(declaration, MDField, );
>> +  OPTIONAL(declaration, MDField, );
>>       \
>> +  OPTIONAL(align, MDUnsignedField, (0, UINT32_MAX));
>>    PARSE_MD_FIELDS();
>>  #undef VISIT_MD_FIELDS
>>
>>    Result = GET_OR_DISTINCT(DIGlobalVariable,
>>                             (Context, scope.Val, name.Val,
>> linkageName.Val,
>>                              file.Val, line.Val, type.Val, isLocal.Val,
>> -                            isDefinition.Val, expr.Val,
>> declaration.Val));
>> +                            isDefinition.Val, expr.Val, declaration.Val,
>> +                            align.Val));
>>    return false;
>>  }
>>
>>  /// ParseDILocalVariable:
>>  ///   ::= !DILocalVariable(arg: 7, scope: !0, name: "foo",
>> -///                        file: !1, line: 7, type: !2, arg: 2, flags: 7)
>> +///                        file: !1, line: 7, type: !2, arg: 2, flags: 7,
>> +///                        align: 8)
>>  ///   ::= !DILocalVariable(scope: !0, name: "foo",
>> -///                        file: !1, line: 7, type: !2, arg: 2, flags: 7)
>> +///                        file: !1, line: 7, type: !2, arg: 2, flags: 7,
>> +///                        align: 8)
>>  bool LLParser::ParseDILocalVariable(MDNode *&Result, bool IsDistinct) {
>>  #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED)
>>       \
>>    REQUIRED(scope, MDField, (/* AllowNull */ false));
>>        \
>> @@ -4222,13 +4226,14 @@ bool LLParser::ParseDILocalVariable(MDNo
>>    OPTIONAL(file, MDField, );
>>        \
>>    OPTIONAL(line, LineField, );
>>        \
>>    OPTIONAL(type, MDField, );
>>        \
>> -  OPTIONAL(flags, DIFlagField, );
>> +  OPTIONAL(flags, DIFlagField, );
>>       \
>> +  OPTIONAL(align, MDUnsignedField, (0, UINT32_MAX));
>>    PARSE_MD_FIELDS();
>>  #undef VISIT_MD_FIELDS
>>
>>    Result = GET_OR_DISTINCT(DILocalVariable,
>>                             (Context, scope.Val, name.Val, file.Val,
>> line.Val,
>> -                            type.Val, arg.Val, flags.Val));
>> +                            type.Val, arg.Val, flags.Val, align.Val));
>>    return false;
>>  }
>>
>>
>> Modified: llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/
>> Reader/BitcodeReader.cpp?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp (original)
>> +++ llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp Wed Oct 19 19:13:12
>> 2016
>> @@ -2734,7 +2734,7 @@ std::error_code BitcodeReader::parseMeta
>>        break;
>>      }
>>      case bitc::METADATA_GLOBAL_VAR: {
>> -      if (Record.size() != 11)
>> +      if (Record.size() < 11 || Record.size() > 12)
>>          return error("Invalid record");
>>
>>        IsDistinct = Record[0];
>> @@ -2742,6 +2742,7 @@ std::error_code BitcodeReader::parseMeta
>>        // Upgrade old metadata, which stored a global variable reference
>> or a
>>        // ConstantInt here.
>>        Metadata *Expr = getMDOrNull(Record[9]);
>> +      uint64_t AlignInBits = (Record.size() > 11) ? Record[11] : 0;
>>        GlobalVariable *Attach = nullptr;
>>        if (auto *CMD = dyn_cast_or_null<ConstantAsMetadata>(Expr)) {
>>          if (auto *GV = dyn_cast<GlobalVariable>(CMD->getValue())) {
>> @@ -2761,7 +2762,7 @@ std::error_code BitcodeReader::parseMeta
>>            (Context, getMDOrNull(Record[1]), getMDString(Record[2]),
>>             getMDString(Record[3]), getMDOrNull(Record[4]), Record[5],
>>             getDITypeRefOrNull(Record[6]), Record[7], Record[8], Expr,
>> -           getMDOrNull(Record[10])));
>> +           getMDOrNull(Record[10]), AlignInBits));
>>        MetadataList.assignValue(DGV, NextMetadataNo++);
>>
>>        if (Attach)
>> @@ -2774,18 +2775,21 @@ std::error_code BitcodeReader::parseMeta
>>        if (Record.size() < 8 || Record.size() > 10)
>>          return error("Invalid record");
>>
>> +      IsDistinct = Record[0] & 1;
>> +      bool HasAlignment = Record[0] & 2;
>>        // 2nd field used to be an artificial tag, either
>> DW_TAG_auto_variable or
>> -      // DW_TAG_arg_variable.
>> -      IsDistinct = Record[0];
>> -      bool HasTag = Record.size() > 8;
>> +      // DW_TAG_arg_variable, if we have alignment flag encoded it
>> means, that
>> +      // this is newer version of record which doesn't have artifical
>> tag.
>> +      bool HasTag = !HasAlignment && Record.size() > 8;
>>        DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[7 +
>> HasTag]);
>> +      uint64_t AlignInBits = HasAlignment ? Record[8 + HasTag] : 0;
>>        MetadataList.assignValue(
>>            GET_OR_DISTINCT(DILocalVariable,
>>                            (Context, getMDOrNull(Record[1 + HasTag]),
>>                             getMDString(Record[2 + HasTag]),
>>                             getMDOrNull(Record[3 + HasTag]), Record[4 +
>> HasTag],
>>                             getDITypeRefOrNull(Record[5 + HasTag]),
>> -                           Record[6 + HasTag], Flags)),
>> +                           Record[6 + HasTag], Flags, AlignInBits)),
>>            NextMetadataNo++);
>>        break;
>>      }
>>
>> Modified: llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/
>> Writer/BitcodeWriter.cpp?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp (original)
>> +++ llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Wed Oct 19 19:13:12
>> 2016
>> @@ -1712,6 +1712,7 @@ void ModuleBitcodeWriter::writeDIGlobalV
>>    Record.push_back(N->isDefinition());
>>    Record.push_back(VE.getMetadataOrNullID(N->getRawExpr()));
>>    Record.push_back(VE.getMetadataOrNullID(N->getStaticDataMem
>> berDeclaration()));
>> +  Record.push_back(N->getAlignInBits());
>>
>>    Stream.EmitRecord(bitc::METADATA_GLOBAL_VAR, Record, Abbrev);
>>    Record.clear();
>> @@ -1720,7 +1721,21 @@ void ModuleBitcodeWriter::writeDIGlobalV
>>  void ModuleBitcodeWriter::writeDILocalVariable(
>>      const DILocalVariable *N, SmallVectorImpl<uint64_t> &Record,
>>      unsigned Abbrev) {
>> -  Record.push_back(N->isDistinct());
>> +  // In order to support all possible bitcode formats in BitcodeReader
>> we need
>> +  // to distiguish the following cases:
>> +  // 1) Record has no artificial tag (Record[1]),
>> +  //   has no obsolete inlinedAt field (Record[9]).
>> +  //   In this case Record size will be 8, HasAlignment flag is false.
>> +  // 2) Record has artificial tag (Record[1]),
>> +  //   has no obsolete inlignedAt field (Record[9]).
>> +  //   In this case Record size will be 9, HasAlignment flag is false.
>> +  // 3) Record has both artificial tag (Record[1]) and
>> +  //   obsolete inlignedAt field (Record[9]).
>> +  //   In this case Record size will be 10, HasAlignment flag is false.
>> +  // 4) Record has neither artificial tag, nor inlignedAt field, but
>> +  //   HasAlignment flag is true and Record[8] contains alignment value.
>> +  const uint64_t HasAlignmentFlag = 1 << 1;
>> +  Record.push_back(N->isDistinct() | HasAlignmentFlag);
>>    Record.push_back(VE.getMetadataOrNullID(N->getScope()));
>>    Record.push_back(VE.getMetadataOrNullID(N->getRawName()));
>>    Record.push_back(VE.getMetadataOrNullID(N->getFile()));
>> @@ -1728,6 +1743,7 @@ void ModuleBitcodeWriter::writeDILocalVa
>>    Record.push_back(VE.getMetadataOrNullID(N->getType()));
>>    Record.push_back(N->getArg());
>>    Record.push_back(N->getFlags());
>> +  Record.push_back(N->getAlignInBits());
>>
>>    Stream.EmitRecord(bitc::METADATA_LOCAL_VAR, Record, Abbrev);
>>    Record.clear();
>>
>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/
>> AsmPrinter/DwarfUnit.cpp?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp Wed Oct 19 19:13:12
>> 2016
>> @@ -1404,9 +1404,11 @@ void DwarfUnit::constructMemberDIE(DIE &
>>        addUInt(MemberDie, dwarf::DW_AT_bit_size, None, Size);
>>
>>        uint64_t Offset = DT->getOffsetInBits();
>> -      uint32_t Align = DT->getAlignInBits() ? DT->getAlignInBits()
>> -                                               : FieldSize;
>> -      uint32_t AlignMask = ~(Align - 1);
>> +      // We can't use DT->getAlignInBits() here: AlignInBits for member
>> type
>> +      // is non-zero if and only if alignment was forced (e.g.
>> _Alignas()),
>> +      // which can't be done with bitfields. Thus we use FieldSize here.
>> +      uint32_t AlignInBits = FieldSize;
>> +      uint32_t AlignMask = ~(AlignInBits - 1);
>>        // The bits from the start of the storage unit to the start of the
>> field.
>>        uint64_t StartBitOffset = Offset - (Offset & AlignMask);
>>        // The byte offset of the field's aligned storage unit inside the
>> struct.
>>
>> Modified: llvm/trunk/lib/IR/AsmWriter.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/AsmWri
>> ter.cpp?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/IR/AsmWriter.cpp (original)
>> +++ llvm/trunk/lib/IR/AsmWriter.cpp Wed Oct 19 19:13:12 2016
>> @@ -1822,6 +1822,7 @@ static void writeDIGlobalVariable(raw_os
>>    Printer.printBool("isDefinition", N->isDefinition());
>>    Printer.printMetadata("expr", N->getExpr());
>>    Printer.printMetadata("declaration", N->getRawStaticDataMemberDecla
>> ration());
>> +  Printer.printInt("align", N->getAlignInBits());
>>    Out << ")";
>>  }
>>
>> @@ -1837,6 +1838,7 @@ static void writeDILocalVariable(raw_ost
>>    Printer.printInt("line", N->getLine());
>>    Printer.printMetadata("type", N->getRawType());
>>    Printer.printDIFlags("flags", N->getFlags());
>> +  Printer.printInt("align", N->getAlignInBits());
>>    Out << ")";
>>  }
>>
>>
>> Modified: llvm/trunk/lib/IR/DIBuilder.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DIBuil
>> der.cpp?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/IR/DIBuilder.cpp (original)
>> +++ llvm/trunk/lib/IR/DIBuilder.cpp Wed Oct 19 19:13:12 2016
>> @@ -195,11 +195,10 @@ DIBasicType *DIBuilder::createNullPtrTyp
>>  }
>>
>>  DIBasicType *DIBuilder::createBasicType(StringRef Name, uint64_t
>> SizeInBits,
>> -                                        uint32_t AlignInBits,
>>                                          unsigned Encoding) {
>>    assert(!Name.empty() && "Unable to create type without name");
>>    return DIBasicType::get(VMContext, dwarf::DW_TAG_base_type, Name,
>> SizeInBits,
>> -                          AlignInBits, Encoding);
>> +                          0, Encoding);
>>  }
>>
>>  DIDerivedType *DIBuilder::createQualifiedType(unsigned Tag, DIType
>> *FromTy) {
>> @@ -277,24 +276,26 @@ static ConstantAsMetadata *getConstantOr
>>
>>  DIDerivedType *DIBuilder::createBitFieldMemberType(
>>      DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNumber,
>> -    uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
>> -    uint64_t StorageOffsetInBits, DINode::DIFlags Flags, DIType *Ty) {
>> +    uint64_t SizeInBits, uint64_t OffsetInBits, uint64_t
>> StorageOffsetInBits,
>> +    DINode::DIFlags Flags, DIType *Ty) {
>>    Flags |= DINode::FlagBitField;
>>    return DIDerivedType::get(
>>        VMContext, dwarf::DW_TAG_member, Name, File, LineNumber,
>> -      getNonCompileUnitScope(Scope), Ty, SizeInBits, AlignInBits,
>> OffsetInBits,
>> -      Flags, ConstantAsMetadata::get(ConstantInt::get(
>> -                 IntegerType::get(VMContext, 64), StorageOffsetInBits)));
>> +      getNonCompileUnitScope(Scope), Ty, SizeInBits, /* AlignInBits */ 0,
>> +      OffsetInBits, Flags,
>> +      ConstantAsMetadata::get(ConstantInt::get(IntegerType::get(VMContext,
>> 64),
>> +                                               StorageOffsetInBits)));
>>  }
>>
>>  DIDerivedType *
>>  DIBuilder::createStaticMemberType(DIScope *Scope, StringRef Name,
>> DIFile *File,
>>                                    unsigned LineNumber, DIType *Ty,
>> -                                  DINode::DIFlags Flags, llvm::Constant
>> *Val) {
>> +                                  DINode::DIFlags Flags, llvm::Constant
>> *Val,
>> +                                  uint32_t AlignInBits) {
>>    Flags |= DINode::FlagStaticMember;
>>    return DIDerivedType::get(VMContext, dwarf::DW_TAG_member, Name, File,
>> -                            LineNumber, getNonCompileUnitScope(Scope),
>> Ty, 0, 0,
>> -                            0, Flags, getConstantOrNull(Val));
>> +                            LineNumber, getNonCompileUnitScope(Scope),
>> Ty, 0,
>> +                            AlignInBits, 0, Flags,
>> getConstantOrNull(Val));
>>  }
>>
>>  DIDerivedType *
>> @@ -535,28 +536,28 @@ static void checkGlobalVariableScope(DIS
>>
>>  DIGlobalVariable *DIBuilder::createGlobalVariable(
>>      DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *F,
>> -    unsigned LineNumber, DIType *Ty, bool isLocalToUnit, DIExpression
>> *Expr,
>> -    MDNode *Decl) {
>> +    unsigned LineNumber, DIType *Ty, bool isLocalToUnit,
>> +    DIExpression *Expr, MDNode *Decl, uint32_t AlignInBits) {
>>    checkGlobalVariableScope(Context);
>>
>>    auto *N = DIGlobalVariable::getDistinct(
>>        VMContext, cast_or_null<DIScope>(Context), Name, LinkageName, F,
>>        LineNumber, Ty, isLocalToUnit, true, Expr,
>> -      cast_or_null<DIDerivedType>(Decl));
>> +      cast_or_null<DIDerivedType>(Decl), AlignInBits);
>>    AllGVs.push_back(N);
>>    return N;
>>  }
>>
>>  DIGlobalVariable *DIBuilder::createTempGlobalVariableFwdDecl(
>>      DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *F,
>> -    unsigned LineNumber, DIType *Ty, bool isLocalToUnit, DIExpression
>> *Expr,
>> -    MDNode *Decl) {
>> +    unsigned LineNumber, DIType *Ty, bool isLocalToUnit,
>> +    DIExpression *Expr, MDNode *Decl, uint32_t AlignInBits) {
>>    checkGlobalVariableScope(Context);
>>
>>    return DIGlobalVariable::getTemporary(
>>               VMContext, cast_or_null<DIScope>(Context), Name,
>> LinkageName, F,
>>               LineNumber, Ty, isLocalToUnit, false, Expr,
>> -             cast_or_null<DIDerivedType>(Decl))
>> +             cast_or_null<DIDerivedType>(Decl), AlignInBits)
>>        .release();
>>  }
>>
>> @@ -564,7 +565,8 @@ static DILocalVariable *createLocalVaria
>>      LLVMContext &VMContext,
>>      DenseMap<MDNode *, SmallVector<TrackingMDNodeRef, 1>>
>> &PreservedVariables,
>>      DIScope *Scope, StringRef Name, unsigned ArgNo, DIFile *File,
>> -    unsigned LineNo, DIType *Ty, bool AlwaysPreserve, DINode::DIFlags
>> Flags) {
>> +    unsigned LineNo, DIType *Ty, bool AlwaysPreserve, DINode::DIFlags
>> Flags,
>> +    uint32_t AlignInBits) {
>>    // FIXME: Why getNonCompileUnitScope()?
>>    // FIXME: Why is "!Context" okay here?
>>    // FIXME: Why doesn't this check for a subprogram or lexical block
>> (AFAICT
>> @@ -573,7 +575,7 @@ static DILocalVariable *createLocalVaria
>>
>>    auto *Node =
>>        DILocalVariable::get(VMContext, cast_or_null<DILocalScope>(Context),
>> Name,
>> -                           File, LineNo, Ty, ArgNo, Flags);
>> +                           File, LineNo, Ty, ArgNo, Flags, AlignInBits);
>>    if (AlwaysPreserve) {
>>      // The optimizer may remove local variables. If there is an interest
>>      // to preserve variable info in such situation then stash it in a
>> @@ -588,10 +590,11 @@ static DILocalVariable *createLocalVaria
>>  DILocalVariable *DIBuilder::createAutoVariable(DIScope *Scope,
>> StringRef Name,
>>                                                 DIFile *File, unsigned
>> LineNo,
>>                                                 DIType *Ty, bool
>> AlwaysPreserve,
>> -                                               DINode::DIFlags Flags) {
>> +                                               DINode::DIFlags Flags,
>> +                                               uint32_t AlignInBits) {
>>    return createLocalVariable(VMContext, PreservedVariables, Scope, Name,
>>                               /* ArgNo */ 0, File, LineNo, Ty,
>> AlwaysPreserve,
>> -                             Flags);
>> +                             Flags, AlignInBits);
>>  }
>>
>>  DILocalVariable *DIBuilder::createParameterVariable(
>> @@ -599,7 +602,8 @@ DILocalVariable *DIBuilder::createParame
>>      unsigned LineNo, DIType *Ty, bool AlwaysPreserve, DINode::DIFlags
>> Flags) {
>>    assert(ArgNo && "Expected non-zero argument number for parameter");
>>    return createLocalVariable(VMContext, PreservedVariables, Scope, Name,
>> ArgNo,
>> -                             File, LineNo, Ty, AlwaysPreserve, Flags);
>> +                             File, LineNo, Ty, AlwaysPreserve, Flags,
>> +                             /* AlignInBits */0);
>>  }
>>
>>  DIExpression *DIBuilder::createExpression(ArrayRef<uint64_t> Addr) {
>>
>> Modified: llvm/trunk/lib/IR/DebugInfoMetadata.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DebugI
>> nfoMetadata.cpp?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/IR/DebugInfoMetadata.cpp (original)
>> +++ llvm/trunk/lib/IR/DebugInfoMetadata.cpp Wed Oct 19 19:13:12 2016
>> @@ -510,16 +510,18 @@ DIGlobalVariable::getImpl(LLVMContext &C
>>                            Metadata *Type, bool IsLocalToUnit, bool
>> IsDefinition,
>>                            Metadata *Variable,
>>                            Metadata *StaticDataMemberDeclaration,
>> +                          uint64_t AlignInBits,
>>                            StorageType Storage, bool ShouldCreate) {
>>    assert(isCanonical(Name) && "Expected canonical MDString");
>>    assert(isCanonical(LinkageName) && "Expected canonical MDString");
>>    DEFINE_GETIMPL_LOOKUP(DIGlobalVariable,
>>                          (Scope, Name, LinkageName, File, Line, Type,
>>                           IsLocalToUnit, IsDefinition, Variable,
>> -                         StaticDataMemberDeclaration));
>> +                         StaticDataMemberDeclaration, AlignInBits));
>>    Metadata *Ops[] = {Scope, Name,        File,     Type,
>>                       Name,  LinkageName, Variable,
>> StaticDataMemberDeclaration};
>> -  DEFINE_GETIMPL_STORE(DIGlobalVariable, (Line, IsLocalToUnit,
>> IsDefinition),
>> +  DEFINE_GETIMPL_STORE(DIGlobalVariable,
>> +                       (Line, IsLocalToUnit, IsDefinition, AlignInBits),
>>                         Ops);
>>  }
>>
>> @@ -527,6 +529,7 @@ DILocalVariable *DILocalVariable::getImp
>>                                            MDString *Name, Metadata *File,
>>                                            unsigned Line, Metadata *Type,
>>                                            unsigned Arg, DIFlags Flags,
>> +                                          uint64_t AlignInBits,
>>                                            StorageType Storage,
>>                                            bool ShouldCreate) {
>>    // 64K ought to be enough for any frontend.
>> @@ -535,9 +538,10 @@ DILocalVariable *DILocalVariable::getImp
>>    assert(Scope && "Expected scope");
>>    assert(isCanonical(Name) && "Expected canonical MDString");
>>    DEFINE_GETIMPL_LOOKUP(DILocalVariable,
>> -                        (Scope, Name, File, Line, Type, Arg, Flags));
>> +                        (Scope, Name, File, Line, Type, Arg, Flags,
>> +                         AlignInBits));
>>    Metadata *Ops[] = {Scope, Name, File, Type};
>> -  DEFINE_GETIMPL_STORE(DILocalVariable, (Line, Arg, Flags), Ops);
>> +  DEFINE_GETIMPL_STORE(DILocalVariable, (Line, Arg, Flags,
>> AlignInBits), Ops);
>>  }
>>
>>  DIExpression *DIExpression::getImpl(LLVMContext &Context,
>>
>> Modified: llvm/trunk/lib/IR/LLVMContextImpl.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/LLVMCo
>> ntextImpl.h?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/IR/LLVMContextImpl.h (original)
>> +++ llvm/trunk/lib/IR/LLVMContextImpl.h Wed Oct 19 19:13:12 2016
>> @@ -761,22 +761,26 @@ template <> struct MDNodeKeyImpl<DIGloba
>>    bool IsDefinition;
>>    Metadata *Expr;
>>    Metadata *StaticDataMemberDeclaration;
>> +  uint64_t AlignInBits;
>>
>>    MDNodeKeyImpl(Metadata *Scope, MDString *Name, MDString *LinkageName,
>>                  Metadata *File, unsigned Line, Metadata *Type,
>> -                bool IsLocalToUnit, bool IsDefinition, Metadata *Expr,
>> -                Metadata *StaticDataMemberDeclaration)
>> +                bool IsLocalToUnit, bool IsDefinition,
>> +                Metadata *Expr, Metadata *StaticDataMemberDeclaration,
>> +                uint64_t AlignInBits)
>>        : Scope(Scope), Name(Name), LinkageName(LinkageName), File(File),
>>          Line(Line), Type(Type), IsLocalToUnit(IsLocalToUnit),
>>          IsDefinition(IsDefinition), Expr(Expr),
>> -        StaticDataMemberDeclaration(StaticDataMemberDeclaration) {}
>> +        StaticDataMemberDeclaration(StaticDataMemberDeclaration),
>> +        AlignInBits(AlignInBits) {}
>>    MDNodeKeyImpl(const DIGlobalVariable *N)
>>        : Scope(N->getRawScope()), Name(N->getRawName()),
>>          LinkageName(N->getRawLinkageName()), File(N->getRawFile()),
>>          Line(N->getLine()), Type(N->getRawType()),
>>          IsLocalToUnit(N->isLocalToUnit()),
>> IsDefinition(N->isDefinition()),
>>          Expr(N->getRawExpr()),
>> -        StaticDataMemberDeclaration(N->getRawStaticDataMemberDeclaration())
>> {}
>> +        StaticDataMemberDeclaration(N->getRawStaticDataMemberDeclara
>> tion()),
>> +        AlignInBits(N->getAlignInBits()) {}
>>
>>    bool isKeyOf(const DIGlobalVariable *RHS) const {
>>      return Scope == RHS->getRawScope() && Name == RHS->getRawName() &&
>> @@ -786,11 +790,19 @@ template <> struct MDNodeKeyImpl<DIGloba
>>             IsDefinition == RHS->isDefinition() &&
>>             Expr == RHS->getRawExpr() &&
>>             StaticDataMemberDeclaration ==
>> -               RHS->getRawStaticDataMemberDeclaration();
>> +               RHS->getRawStaticDataMemberDeclaration() &&
>> +           AlignInBits == RHS->getAlignInBits();
>>    }
>>    unsigned getHashValue() const {
>> +    // We do not use AlignInBits in hashing function here on purpose:
>> +    // in most cases this param for local variable is zero (for function
>> param
>> +    // it is always zero). This leads to lots of hash collisions and
>> errors on
>> +    // cases with lots of similar variables.
>> +    // clang/test/CodeGen/debug-info-257-args.c is an example of this
>> problem,
>> +    // generated IR is random for each run and test fails with Align
>> included.
>> +    // TODO: make hashing work fine with such situations
>>      return hash_combine(Scope, Name, LinkageName, File, Line, Type,
>> -                        IsLocalToUnit, IsDefinition, Expr,
>> +                        IsLocalToUnit, IsDefinition, /* AlignInBits, */
>> Expr,
>>                          StaticDataMemberDeclaration);
>>    }
>>  };
>> @@ -803,23 +815,32 @@ template <> struct MDNodeKeyImpl<DILocal
>>    Metadata *Type;
>>    unsigned Arg;
>>    unsigned Flags;
>> +  uint64_t AlignInBits;
>>
>>    MDNodeKeyImpl(Metadata *Scope, MDString *Name, Metadata *File,
>> unsigned Line,
>> -                Metadata *Type, unsigned Arg, unsigned Flags)
>> +                Metadata *Type, unsigned Arg, unsigned Flags,
>> +                uint64_t AlignInBits)
>>        : Scope(Scope), Name(Name), File(File), Line(Line), Type(Type),
>> Arg(Arg),
>> -        Flags(Flags) {}
>> +        Flags(Flags), AlignInBits(AlignInBits) {}
>>    MDNodeKeyImpl(const DILocalVariable *N)
>>        : Scope(N->getRawScope()), Name(N->getRawName()),
>> File(N->getRawFile()),
>>          Line(N->getLine()), Type(N->getRawType()), Arg(N->getArg()),
>> -        Flags(N->getFlags()) {}
>> +        Flags(N->getFlags()), AlignInBits(N->getAlignInBits()) {}
>>
>>    bool isKeyOf(const DILocalVariable *RHS) const {
>>      return Scope == RHS->getRawScope() && Name == RHS->getRawName() &&
>>             File == RHS->getRawFile() && Line == RHS->getLine() &&
>>             Type == RHS->getRawType() && Arg == RHS->getArg() &&
>> -           Flags == RHS->getFlags();
>> +           Flags == RHS->getFlags() && AlignInBits ==
>> RHS->getAlignInBits();
>>    }
>>    unsigned getHashValue() const {
>> +    // We do not use AlignInBits in hashing function here on purpose:
>> +    // in most cases this param for local variable is zero (for function
>> param
>> +    // it is always zero). This leads to lots of hash collisions and
>> errors on
>> +    // cases with lots of similar variables.
>> +    // clang/test/CodeGen/debug-info-257-args.c is an example of this
>> problem,
>> +    // generated IR is random for each run and test fails with Align
>> included.
>> +    // TODO: make hashing work fine with such situations
>>      return hash_combine(Scope, Name, File, Line, Type, Arg, Flags);
>>    }
>>  };
>>
>> Modified: llvm/trunk/test/Assembler/diglobalvariable.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assemble
>> r/diglobalvariable.ll?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/test/Assembler/diglobalvariable.ll (original)
>> +++ llvm/trunk/test/Assembler/diglobalvariable.ll Wed Oct 19 19:13:12
>> 2016
>> @@ -12,10 +12,10 @@
>>  !3 = !DIBasicType(name: "int", size: 32, align: 32, encoding:
>> DW_ATE_signed)
>>  !4 = distinct !{}
>>
>> -; CHECK: !5 = !DIGlobalVariable(name: "foo", linkageName: "foo", scope:
>> !0, file: !2, line: 7, type: !3, isLocal: true, isDefinition: false)
>> +; CHECK: !5 = !DIGlobalVariable(name: "foo", linkageName: "foo", scope:
>> !0, file: !2, line: 7, type: !3, isLocal: true, isDefinition: false, align:
>> 32)
>>  !5 = !DIGlobalVariable(name: "foo", linkageName: "foo", scope: !0,
>>                         file: !2, line: 7, type: !3, isLocal: true,
>> -                       isDefinition: false)
>> +                       isDefinition: false, align: 32)
>>
>>  ; CHECK: !6 = !DIGlobalVariable(name: "foo", scope: !0, isLocal: false,
>> isDefinition: true, expr: !7)
>>  ; CHECK: !7 = !DIExpression(DW_OP_constu, 42, DW_OP_stack_value)
>>
>> Modified: llvm/trunk/test/Assembler/dilocalvariable.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Assemble
>> r/dilocalvariable.ll?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/test/Assembler/dilocalvariable.ll (original)
>> +++ llvm/trunk/test/Assembler/dilocalvariable.ll Wed Oct 19 19:13:12 2016
>> @@ -18,11 +18,11 @@
>>  !3 = !DIBasicType(name: "int", size: 32, align: 32, encoding:
>> DW_ATE_signed)
>>  !4 = !DILocation(scope: !0)
>>
>> -; CHECK: !5 = !DILocalVariable(name: "foo", arg: 3, scope: !0, file: !2,
>> line: 7, type: !3, flags: DIFlagArtificial)
>> +; CHECK: !5 = !DILocalVariable(name: "foo", arg: 3, scope: !0, file: !2,
>> line: 7, type: !3, flags: DIFlagArtificial, align: 32)
>>  ; CHECK: !6 = !DILocalVariable(name: "foo", scope: !0, file: !2, line:
>> 7, type: !3, flags: DIFlagArtificial)
>>  !5 = !DILocalVariable(name: "foo", arg: 3,
>>                        scope: !0, file: !2, line: 7, type: !3,
>> -                      flags: DIFlagArtificial)
>> +                      flags: DIFlagArtificial, align: 32)
>>  !6 = !DILocalVariable(name: "foo", scope: !0,
>>                        file: !2, line: 7, type: !3, flags:
>> DIFlagArtificial)
>>
>>
>> Added: llvm/trunk/test/Bitcode/dilocalvariable-3.9.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/
>> dilocalvariable-3.9.ll?rev=284678&view=auto
>> ============================================================
>> ==================
>> --- llvm/trunk/test/Bitcode/dilocalvariable-3.9.ll (added)
>> +++ llvm/trunk/test/Bitcode/dilocalvariable-3.9.ll Wed Oct 19 19:13:12
>> 2016
>> @@ -0,0 +1,43 @@
>> +; RUN: llvm-dis -o - %s.bc | FileCheck %s
>> +
>> +; CHECK: !9 = !DILocalVariable(name: "i", scope: !6, file: !1, line: 3,
>> type: !10)
>> +; CHECK: !10 = !DIBasicType(name: "int", size: 32, align: 32, encoding:
>> DW_ATE_signed)
>> +
>> +source_filename = "test.cpp"
>> +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
>> +target triple = "x86_64-unknown-linux-gnu"
>> +
>> +; Function Attrs: nounwind uwtable
>> +define void @_Z1fv() #0 !dbg !6 {
>> +entry:
>> +  %i = alloca i32, align 4
>> +  call void @llvm.dbg.declare(metadata i32* %i, metadata !10, metadata
>> !12), !dbg !13
>> +  store i32 42, i32* %i, align 4, !dbg !13
>> +  ret void, !dbg !14
>> +}
>> +
>> +; Function Attrs: nounwind readnone
>> +declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
>> +
>> +attributes #0 = { nounwind uwtable }
>> +attributes #1 = { nounwind readnone }
>> +
>> +!llvm.dbg.cu = !{!0}
>> +!llvm.module.flags = !{!3, !4}
>> +!llvm.ident = !{!5}
>> +
>> +!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1,
>> producer: "clang version 3.9.1 (http://llvm.org/git/clang.git
>> c3709e72d22432f53f8e2f14354def31a96734fe)", isOptimized: false,
>> runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
>> +!1 = !DIFile(filename: "test.cpp", directory: "/tmp")
>> +!2 = !{}
>> +!3 = !{i32 2, !"Dwarf Version", i32 4}
>> +!4 = !{i32 2, !"Debug Info Version", i32 3}
>> +!5 = !{!"clang version 3.9.1 (http://llvm.org/git/clang.git
>> c3709e72d22432f53f8e2f14354def31a96734fe)"}
>> +!6 = distinct !DISubprogram(name: "f", linkageName: "_Z1fv", scope: !7,
>> file: !7, line: 1, type: !8, isLocal: false, isDefinition: true, scopeLine:
>> 2, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)
>> +!7 = !DIFile(filename: "test.cpp", directory: "/tmp")
>> +!8 = !DISubroutineType(types: !9)
>> +!9 = !{null}
>> +!10 = !DILocalVariable(name: "i", scope: !6, file: !7, line: 3, type:
>> !11)
>> +!11 = !DIBasicType(name: "int", size: 32, align: 32, encoding:
>> DW_ATE_signed)
>> +!12 = !DIExpression()
>> +!13 = !DILocation(line: 3, column: 7, scope: !6)
>> +!14 = !DILocation(line: 4, column: 1, scope: !6)
>>
>> Added: llvm/trunk/test/Bitcode/dilocalvariable-3.9.ll.bc
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/
>> dilocalvariable-3.9.ll.bc?rev=284678&view=auto
>> ============================================================
>> ==================
>>     (empty)
>>
>> Modified: llvm/trunk/test/DebugInfo/AArch64/bitfields.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInf
>> o/AArch64/bitfields.ll?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/test/DebugInfo/AArch64/bitfields.ll (original)
>> +++ llvm/trunk/test/DebugInfo/AArch64/bitfields.ll Wed Oct 19 19:13:12
>> 2016
>> @@ -60,13 +60,13 @@ target triple = "aarch64_be--linux-gnu"
>>  !3 = !{!4}
>>  !4 = !DIGlobalVariable(name: "b", scope: !0, file: !5, line: 8, type:
>> !6, isLocal: false, isDefinition: true)
>>  !5 = !DIFile(filename: "bitfields.c", directory: "/")
>> -!6 = !DICompositeType(tag: DW_TAG_structure_type, name: "bitfield",
>> file: !5, line: 1, size: 96, align: 32, elements: !7)
>> +!6 = !DICompositeType(tag: DW_TAG_structure_type, name: "bitfield",
>> file: !5, line: 1, size: 96, elements: !7)
>>  !7 = !{!8, !10, !11, !12}
>> -!8 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !6, file: !5,
>> line: 2, baseType: !9, size: 2, align: 32)
>> -!9 = !DIBasicType(name: "int", size: 32, align: 32, encoding:
>> DW_ATE_signed)
>> -!10 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !6, file: !5,
>> line: 3, baseType: !9, size: 32, align: 32, offset: 32)
>> -!11 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !6, file: !5,
>> line: 4, baseType: !9, size: 1, align: 32, offset: 64)
>> -!12 = !DIDerivedType(tag: DW_TAG_member, name: "d", scope: !6, file: !5,
>> line: 5, baseType: !9, size: 28, align: 32, offset: 65)
>> +!8 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !6, file: !5,
>> line: 2, baseType: !9, size: 2)
>> +!9 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
>> +!10 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !6, file: !5,
>> line: 3, baseType: !9, size: 32, offset: 32)
>> +!11 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !6, file: !5,
>> line: 4, baseType: !9, size: 1, offset: 64)
>> +!12 = !DIDerivedType(tag: DW_TAG_member, name: "d", scope: !6, file: !5,
>> line: 5, baseType: !9, size: 28, offset: 65)
>>  !13 = !{i32 2, !"Dwarf Version", i32 2}
>>  !14 = !{i32 2, !"Debug Info Version", i32 3}
>>  !15 = !{i32 1, !"PIC Level", i32 2}
>>
>> Modified: llvm/trunk/test/DebugInfo/ARM/big-endian-bitfield.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInf
>> o/ARM/big-endian-bitfield.ll?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/test/DebugInfo/ARM/big-endian-bitfield.ll (original)
>> +++ llvm/trunk/test/DebugInfo/ARM/big-endian-bitfield.ll Wed Oct 19
>> 19:13:12 2016
>> @@ -23,29 +23,29 @@ target datalayout = "E-m:e-p:32:32-i64:6
>>  !2 = !{}
>>  !3 = !{!4}
>>  !4 = distinct !DIGlobalVariable(name: "s", scope: !0, file: !1, line: 6,
>> type: !5, isLocal: false, isDefinition: true)
>> -!5 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S",
>> file: !1, line: 1, size: 32, align: 32, elements: !6)
>> +!5 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S",
>> file: !1, line: 1, size: 32, elements: !6)
>>  !6 = !{!7, !9, !10, !11}
>>  ; CHECK: DW_TAG_member
>>  ; CHECK-NEXT: DW_AT_name{{.*}}"j"
>>  ; CHECK-NOT:  DW_TAG
>>  ; CHECK:      DW_AT_data_bit_offset      [DW_FORM_data1]       (0x00)
>> -!7 = !DIDerivedType(tag: DW_TAG_member, name: "j", scope: !5, file: !1,
>> line: 2, baseType: !8, size: 5, align: 32)
>> -!8 = !DIBasicType(name: "int", size: 32, align: 32, encoding:
>> DW_ATE_signed)
>> +!7 = !DIDerivedType(tag: DW_TAG_member, name: "j", scope: !5, file: !1,
>> line: 2, baseType: !8, size: 5)
>> +!8 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
>>  ; CHECK: DW_TAG_member
>>  ; CHECK-NEXT: DW_AT_name{{.*}}"k"
>>  ; CHECK-NOT:  DW_TAG
>>  ; CHECK:      DW_AT_data_bit_offset      [DW_FORM_data1]       (0x05)
>> -!9 = !DIDerivedType(tag: DW_TAG_member, name: "k", scope: !5, file: !1,
>> line: 3, baseType: !8, size: 6, align: 32, offset: 5)
>> +!9 = !DIDerivedType(tag: DW_TAG_member, name: "k", scope: !5, file: !1,
>> line: 3, baseType: !8, size: 6, offset: 5)
>>  ; CHECK: DW_TAG_member
>>  ; CHECK-NEXT: DW_AT_name{{.*}}"m"
>>  ; CHECK-NOT:  DW_TAG
>>  ; CHECK:      DW_AT_data_bit_offset      [DW_FORM_data1]       (0x0b)
>> -!10 = !DIDerivedType(tag: DW_TAG_member, name: "m", scope: !5, file: !1,
>> line: 4, baseType: !8, size: 5, align: 32, offset: 11)
>> +!10 = !DIDerivedType(tag: DW_TAG_member, name: "m", scope: !5, file: !1,
>> line: 4, baseType: !8, size: 5, offset: 11)
>>  ; CHECK: DW_TAG_member
>>  ; CHECK-NEXT: DW_AT_name{{.*}}"n"
>>  ; CHECK-NOT:  DW_TAG
>>  ; CHECK:      DW_AT_data_bit_offset      [DW_FORM_data1]       (0x10)
>> -!11 = !DIDerivedType(tag: DW_TAG_member, name: "n", scope: !5, file: !1,
>> line: 5, baseType: !8, size: 8, align: 32, offset: 16)
>> +!11 = !DIDerivedType(tag: DW_TAG_member, name: "n", scope: !5, file: !1,
>> line: 5, baseType: !8, size: 8, offset: 16)
>>  !12 = !{i32 2, !"Dwarf Version", i32 4}
>>  !13 = !{i32 2, !"Debug Info Version", i32 3}
>>  !14 = !{i32 1, !"PIC Level", i32 2}
>>
>> Modified: llvm/trunk/test/DebugInfo/COFF/bitfields.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInf
>> o/COFF/bitfields.ll?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/test/DebugInfo/COFF/bitfields.ll (original)
>> +++ llvm/trunk/test/DebugInfo/COFF/bitfields.ll Wed Oct 19 19:13:12 2016
>> @@ -195,33 +195,33 @@ target triple = "x86_64-pc-windows-msvc1
>>  !3 = !{!4, !10, !29}
>>  !4 = distinct !DIGlobalVariable(name: "s0", scope: !0, file: !5, line:
>> 7, type: !6, isLocal: false, isDefinition: true)
>>  !5 = !DIFile(filename: "<stdin>", directory:
>> "/usr/local/google/home/majnemer/llvm/src")
>> -!6 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S0",
>> file: !5, line: 3, size: 24, align: 8, elements: !7)
>> +!6 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S0",
>> file: !5, line: 3, size: 24, elements: !7)
>>  !7 = !{!8}
>> -!8 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !6, file: !5,
>> line: 6, baseType: !9, size: 8, align: 16, offset: 16, flags:
>> DIFlagBitField, extraData: i64 8)
>> -!9 = !DIBasicType(name: "short", size: 16, align: 16, encoding:
>> DW_ATE_signed)
>> +!8 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !6, file: !5,
>> line: 6, baseType: !9, size: 8, offset: 16, flags: DIFlagBitField,
>> extraData: i64 8)
>> +!9 = !DIBasicType(name: "short", size: 16, encoding: DW_ATE_signed)
>>  !10 = distinct !DIGlobalVariable(name: "s1", scope: !0, file: !5, line:
>> 18, type: !11, isLocal: false, isDefinition: true)
>> -!11 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S1",
>> file: !5, line: 10, size: 128, align: 8, elements: !12)
>> +!11 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S1",
>> file: !5, line: 10, size: 128, elements: !12)
>>  !12 = !{!13, !18, !19, !21, !22, !23, !28}
>> -!13 = !DIDerivedType(tag: DW_TAG_member, name: "x1", scope: !11, file:
>> !5, line: 11, baseType: !14, size: 16, align: 8)
>> -!14 = !DICompositeType(tag: DW_TAG_array_type, baseType: !15, size: 16,
>> align: 8, elements: !16)
>> -!15 = !DIBasicType(name: "char", size: 8, align: 8, encoding:
>> DW_ATE_signed_char)
>> +!13 = !DIDerivedType(tag: DW_TAG_member, name: "x1", scope: !11, file:
>> !5, line: 11, baseType: !14, size: 16)
>> +!14 = !DICompositeType(tag: DW_TAG_array_type, baseType: !15, size: 16,
>> elements: !16)
>> +!15 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)
>>  !16 = !{!17}
>>  !17 = !DISubrange(count: 2)
>> -!18 = !DIDerivedType(tag: DW_TAG_member, name: "x2", scope: !11, file:
>> !5, line: 12, baseType: !15, size: 8, align: 8, offset: 16)
>> -!19 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !11, file:
>> !5, line: 13, baseType: !20, size: 23, align: 32, offset: 24, flags:
>> DIFlagBitField, extraData: i64 24)
>> -!20 = !DIBasicType(name: "int", size: 32, align: 32, encoding:
>> DW_ATE_signed)
>> -!21 = !DIDerivedType(tag: DW_TAG_member, name: "z", scope: !11, file:
>> !5, line: 14, baseType: !20, size: 23, align: 32, offset: 56, flags:
>> DIFlagBitField, extraData: i64 56)
>> -!22 = !DIDerivedType(tag: DW_TAG_member, name: "w", scope: !11, file:
>> !5, line: 15, baseType: !20, size: 2, align: 32, offset: 79, flags:
>> DIFlagBitField, extraData: i64 56)
>> -!23 = !DIDerivedType(tag: DW_TAG_member, name: "v", scope: !11, file:
>> !5, line: 16, baseType: !24, size: 24, align: 8, offset: 88)
>> -!24 = distinct !DICompositeType(tag: DW_TAG_structure_type, scope: !11,
>> file: !5, line: 16, size: 24, align: 8, elements: !25)
>> +!18 = !DIDerivedType(tag: DW_TAG_member, name: "x2", scope: !11, file:
>> !5, line: 12, baseType: !15, size: 8, offset: 16)
>> +!19 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !11, file:
>> !5, line: 13, baseType: !20, size: 23, offset: 24, flags: DIFlagBitField,
>> extraData: i64 24)
>> +!20 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
>> +!21 = !DIDerivedType(tag: DW_TAG_member, name: "z", scope: !11, file:
>> !5, line: 14, baseType: !20, size: 23, offset: 56, flags: DIFlagBitField,
>> extraData: i64 56)
>> +!22 = !DIDerivedType(tag: DW_TAG_member, name: "w", scope: !11, file:
>> !5, line: 15, baseType: !20, size: 2, offset: 79, flags: DIFlagBitField,
>> extraData: i64 56)
>> +!23 = !DIDerivedType(tag: DW_TAG_member, name: "v", scope: !11, file:
>> !5, line: 16, baseType: !24, size: 24, offset: 88)
>> +!24 = distinct !DICompositeType(tag: DW_TAG_structure_type, scope: !11,
>> file: !5, line: 16, size: 24, elements: !25)
>>  !25 = !{!26, !27}
>> -!26 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !24, file:
>> !5, line: 16, baseType: !15, size: 8, align: 8)
>> -!27 = !DIDerivedType(tag: DW_TAG_member, name: "s", scope: !24, file:
>> !5, line: 16, baseType: !9, size: 16, align: 16, offset: 8)
>> -!28 = !DIDerivedType(tag: DW_TAG_member, name: "u", scope: !11, file:
>> !5, line: 17, baseType: !9, size: 3, align: 16, offset: 112, flags:
>> DIFlagBitField, extraData: i64 112)
>> +!26 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !24, file:
>> !5, line: 16, baseType: !15, size: 8)
>> +!27 = !DIDerivedType(tag: DW_TAG_member, name: "s", scope: !24, file:
>> !5, line: 16, baseType: !9, size: 16, offset: 8)
>> +!28 = !DIDerivedType(tag: DW_TAG_member, name: "u", scope: !11, file:
>> !5, line: 17, baseType: !9, size: 3, offset: 112, flags: DIFlagBitField,
>> extraData: i64 112)
>>  !29 = distinct !DIGlobalVariable(name: "s2", scope: !0, file: !5, line:
>> 24, type: !30, isLocal: false, isDefinition: true)
>> -!30 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S2",
>> file: !5, line: 21, size: 32, align: 8, elements: !31)
>> +!30 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S2",
>> file: !5, line: 21, size: 32, elements: !31)
>>  !31 = !{!32}
>> -!32 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !30, file:
>> !5, line: 23, baseType: !20, size: 1, align: 32, flags: DIFlagBitField,
>> extraData: i64 0)
>> +!32 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !30, file:
>> !5, line: 23, baseType: !20, size: 1, flags: DIFlagBitField, extraData: i64
>> 0)
>>  !33 = !{i32 2, !"CodeView", i32 1}
>>  !34 = !{i32 2, !"Debug Info Version", i32 3}
>>  !35 = !{i32 1, !"PIC Level", i32 2}
>>
>> Modified: llvm/trunk/test/DebugInfo/X86/bitfields-dwarf4.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInf
>> o/X86/bitfields-dwarf4.ll?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/test/DebugInfo/X86/bitfields-dwarf4.ll (original)
>> +++ llvm/trunk/test/DebugInfo/X86/bitfields-dwarf4.ll Wed Oct 19
>> 19:13:12 2016
>> @@ -32,7 +32,7 @@ target triple = "x86_64-apple-macosx"
>>  !2 = !{}
>>  !3 = !{!4}
>>  !4 = distinct !DIGlobalVariable(name: "s", scope: !0, file: !1, line: 8,
>> type: !5, isLocal: false, isDefinition: true)
>> -!5 = distinct !DICompositeType(tag: DW_TAG_structure_type, name:
>> "PackedBits", file: !1, line: 3, size: 40, align: 8, elements: !6)
>> +!5 = distinct !DICompositeType(tag: DW_TAG_structure_type, name:
>> "PackedBits", file: !1, line: 3, size: 40, elements: !6)
>>  !6 = !{!7, !9, !13}
>>
>>  ; CHECK: DW_TAG_member
>> @@ -41,9 +41,9 @@ target triple = "x86_64-apple-macosx"
>>  ; CHECK-NOT:  DW_AT_bit_offset
>>  ; CHECK-NOT:  DW_AT_data_bit_offset
>>  ; CHECK:      DW_AT_data_member_location [DW_FORM_data1]       (0x00)
>> -!7 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !5, file: !1,
>> line: 5, baseType: !8, size: 8, align: 8)
>> +!7 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !5, file: !1,
>> line: 5, baseType: !8, size: 8)
>>
>> -!8 = !DIBasicType(name: "char", size: 8, align: 8, encoding:
>> DW_ATE_signed_char)
>> +!8 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)
>>
>>  ; CHECK: DW_TAG_member
>>  ; CHECK-NEXT: DW_AT_name{{.*}}"b"
>> @@ -54,11 +54,11 @@ target triple = "x86_64-apple-macosx"
>>  ; CHECK-NOT:  DW_AT_byte_size
>>  ; CHECK-NEXT: DW_AT_data_bit_offset      [DW_FORM_data1]       (0x08)
>>  ; CHECK-NOT:  DW_AT_data_member_location
>> -!9 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !5, file: !1,
>> line: 6, baseType: !10, size: 5, align: 32, offset: 8)
>> +!9 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !5, file: !1,
>> line: 6, baseType: !10, size: 5, offset: 8)
>>
>>  !10 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint32_t", file: !11,
>> line: 183, baseType: !12)
>>  !11 = !DIFile(filename: "/Volumes/Data/llvm/_build.nin
>> ja.release/bin/../lib/clang/3.9.0/include/stdint.h", directory:
>> "/Volumes/Data/llvm")
>> -!12 = !DIBasicType(name: "unsigned int", size: 32, align: 32, encoding:
>> DW_ATE_unsigned)
>> +!12 = !DIBasicType(name: "unsigned int", size: 32, encoding:
>> DW_ATE_unsigned)
>>
>>  ; CHECK: DW_TAG_member
>>  ; CHECK-NEXT: DW_AT_name{{.*}}"c"
>> @@ -69,7 +69,7 @@ target triple = "x86_64-apple-macosx"
>>  ; CHECK-NEXT: DW_AT_data_bit_offset      [DW_FORM_data1]       (0x0d)
>>  ; CHECK-NOT:  DW_AT_data_member_location
>>  ; CHECK: DW_TAG
>> -!13 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !5, file: !1,
>> line: 7, baseType: !10, size: 27, align: 32, offset: 13)
>> +!13 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !5, file: !1,
>> line: 7, baseType: !10, size: 27, offset: 13)
>>
>>  !14 = !{i32 2, !"Dwarf Version", i32 4}
>>  !15 = !{i32 2, !"Debug Info Version", i32 3}
>>
>> Modified: llvm/trunk/test/DebugInfo/X86/bitfields.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInf
>> o/X86/bitfields.ll?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/test/DebugInfo/X86/bitfields.ll (original)
>> +++ llvm/trunk/test/DebugInfo/X86/bitfields.ll Wed Oct 19 19:13:12 2016
>> @@ -60,13 +60,13 @@ target triple = "x86_64-apple-macosx"
>>  !3 = !{!4}
>>  !4 = !DIGlobalVariable(name: "b", scope: !0, file: !5, line: 8, type:
>> !6, isLocal: false, isDefinition: true)
>>  !5 = !DIFile(filename: "bitfields.c", directory: "/")
>> -!6 = !DICompositeType(tag: DW_TAG_structure_type, name: "bitfield",
>> file: !5, line: 1, size: 96, align: 32, elements: !7)
>> +!6 = !DICompositeType(tag: DW_TAG_structure_type, name: "bitfield",
>> file: !5, line: 1, size: 96, elements: !7)
>>  !7 = !{!8, !10, !11, !12}
>> -!8 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !6, file: !5,
>> line: 2, baseType: !9, size: 2, align: 32)
>> -!9 = !DIBasicType(name: "int", size: 32, align: 32, encoding:
>> DW_ATE_signed)
>> -!10 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !6, file: !5,
>> line: 3, baseType: !9, size: 32, align: 32, offset: 32)
>> -!11 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !6, file: !5,
>> line: 4, baseType: !9, size: 1, align: 32, offset: 64)
>> -!12 = !DIDerivedType(tag: DW_TAG_member, name: "d", scope: !6, file: !5,
>> line: 5, baseType: !9, size: 28, align: 32, offset: 65)
>> +!8 = !DIDerivedType(tag: DW_TAG_member, name: "a", scope: !6, file: !5,
>> line: 2, baseType: !9, size: 2)
>> +!9 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
>> +!10 = !DIDerivedType(tag: DW_TAG_member, name: "b", scope: !6, file: !5,
>> line: 3, baseType: !9, size: 32, offset: 32)
>> +!11 = !DIDerivedType(tag: DW_TAG_member, name: "c", scope: !6, file: !5,
>> line: 4, baseType: !9, size: 1, offset: 64)
>> +!12 = !DIDerivedType(tag: DW_TAG_member, name: "d", scope: !6, file: !5,
>> line: 5, baseType: !9, size: 28, offset: 65)
>>  !13 = !{i32 2, !"Dwarf Version", i32 2}
>>  !14 = !{i32 2, !"Debug Info Version", i32 3}
>>  !15 = !{i32 1, !"PIC Level", i32 2}
>>
>> Modified: llvm/trunk/test/DebugInfo/X86/debug-info-packed-struct.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInf
>> o/X86/debug-info-packed-struct.ll?rev=284678&r1=
>> 284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/test/DebugInfo/X86/debug-info-packed-struct.ll (original)
>> +++ llvm/trunk/test/DebugInfo/X86/debug-info-packed-struct.ll Wed Oct 19
>> 19:13:12 2016
>> @@ -154,45 +154,45 @@ target triple = "x86_64-apple-darwin"
>>  !3 = !{!4, !18, !25, !35}
>>  !4 = !DIGlobalVariable(name: "l0", scope: !0, file: !5, line: 88, type:
>> !6, isLocal: false, isDefinition: true)
>>  !5 = !DIFile(filename: "/llvm/tools/clang/test/CodeGen/debug-info-packed-struct.c",
>> directory: "/llvm/_build.ninja.release")
>> -!6 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout0", file:
>> !5, line: 15, size: 192, align: 64, elements: !7)
>> +!6 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout0", file:
>> !5, line: 15, size: 192, elements: !7)
>>  !7 = !{!8, !10, !17}
>> -!8 = !DIDerivedType(tag: DW_TAG_member, name: "l0_ofs0", scope: !6,
>> file: !5, line: 16, baseType: !9, size: 8, align: 8)
>> -!9 = !DIBasicType(name: "char", size: 8, align: 8, encoding:
>> DW_ATE_signed_char)
>> -!10 = !DIDerivedType(tag: DW_TAG_member, name: "l0_ofs8", scope: !6,
>> file: !5, line: 17, baseType: !11, size: 64, align: 64, offset: 64)
>> -!11 = !DICompositeType(tag: DW_TAG_structure_type, name: "size8", file:
>> !5, line: 11, size: 64, align: 64, elements: !12)
>> +!8 = !DIDerivedType(tag: DW_TAG_member, name: "l0_ofs0", scope: !6,
>> file: !5, line: 16, baseType: !9, size: 8)
>> +!9 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)
>> +!10 = !DIDerivedType(tag: DW_TAG_member, name: "l0_ofs8", scope: !6,
>> file: !5, line: 17, baseType: !11, size: 64, offset: 64)
>> +!11 = !DICompositeType(tag: DW_TAG_structure_type, name: "size8", file:
>> !5, line: 11, size: 64, elements: !12)
>>  !12 = !{!13, !15}
>> -!13 = !DIDerivedType(tag: DW_TAG_member, name: "i", scope: !11, file:
>> !5, line: 12, baseType: !14, size: 4, align: 32)
>> -!14 = !DIBasicType(name: "int", size: 32, align: 32, encoding:
>> DW_ATE_signed)
>> +!13 = !DIDerivedType(tag: DW_TAG_member, name: "i", scope: !11, file:
>> !5, line: 12, baseType: !14, size: 4)
>> +!14 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
>>  !15 = !DIDerivedType(tag: DW_TAG_member, name: "l", scope: !11, file:
>> !5, line: 13, baseType: !16, size: 60, offset: 4)
>> -!16 = !DIBasicType(name: "long long int", size: 64, align: 64, encoding:
>> DW_ATE_signed)
>> -!17 = !DIDerivedType(tag: DW_TAG_member, name: "l0_ofs16", scope: !6,
>> file: !5, line: 18, baseType: !14, size: 1, align: 32, offset: 128)
>> +!16 = !DIBasicType(name: "long long int", size: 64, encoding:
>> DW_ATE_signed)
>> +!17 = !DIDerivedType(tag: DW_TAG_member, name: "l0_ofs16", scope: !6,
>> file: !5, line: 18, baseType: !14, size: 1, offset: 128)
>>  !18 = !DIGlobalVariable(name: "l1", scope: !0, file: !5, line: 89, type:
>> !19, isLocal: false, isDefinition: true)
>> -!19 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout1",
>> file: !5, line: 34, size: 96, align: 32, elements: !20)
>> +!19 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout1",
>> file: !5, line: 34, size: 96, elements: !20)
>>  !20 = !{!21, !22, !24}
>> -!21 = !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs0", scope: !19,
>> file: !5, line: 35, baseType: !9, size: 8, align: 8)
>> -!22 = !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs1", scope: !19,
>> file: !5, line: 36, baseType: !23, size: 64, align: 8, offset: 8)
>> -!23 = !DICompositeType(tag: DW_TAG_structure_type, name: "size8_anon",
>> file: !5, line: 30, size: 64, align: 8, elements: !2)
>> -!24 = !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs9", scope: !19,
>> file: !5, line: 37, baseType: !14, size: 1, align: 32, offset: 72)
>> +!21 = !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs0", scope: !19,
>> file: !5, line: 35, baseType: !9, size: 8)
>> +!22 = !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs1", scope: !19,
>> file: !5, line: 36, baseType: !23, size: 64, offset: 8)
>> +!23 = !DICompositeType(tag: DW_TAG_structure_type, name: "size8_anon",
>> file: !5, line: 30, size: 64, elements: !2)
>> +!24 = !DIDerivedType(tag: DW_TAG_member, name: "l1_ofs9", scope: !19,
>> file: !5, line: 37, baseType: !14, size: 1, offset: 72)
>>  !25 = !DIGlobalVariable(name: "l2", scope: !0, file: !5, line: 90, type:
>> !26, isLocal: false, isDefinition: true)
>> -!26 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout2",
>> file: !5, line: 54, size: 80, align: 8, elements: !27)
>> +!26 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout2",
>> file: !5, line: 54, size: 80, elements: !27)
>>  !27 = !{!28, !29, !34}
>> -!28 = !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs0", scope: !26,
>> file: !5, line: 55, baseType: !9, size: 8, align: 8)
>> -!29 = !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs1", scope: !26,
>> file: !5, line: 56, baseType: !30, size: 64, align: 8, offset: 8)
>> -!30 = !DICompositeType(tag: DW_TAG_structure_type, name: "size8_pack1",
>> file: !5, line: 50, size: 64, align: 8, elements: !31)
>> +!28 = !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs0", scope: !26,
>> file: !5, line: 55, baseType: !9, size: 8)
>> +!29 = !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs1", scope: !26,
>> file: !5, line: 56, baseType: !30, size: 64, offset: 8)
>> +!30 = !DICompositeType(tag: DW_TAG_structure_type, name: "size8_pack1",
>> file: !5, line: 50, size: 64, elements: !31)
>>  !31 = !{!32, !33}
>> -!32 = !DIDerivedType(tag: DW_TAG_member, name: "i", scope: !30, file:
>> !5, line: 51, baseType: !14, size: 4, align: 32)
>> +!32 = !DIDerivedType(tag: DW_TAG_member, name: "i", scope: !30, file:
>> !5, line: 51, baseType: !14, size: 4)
>>  !33 = !DIDerivedType(tag: DW_TAG_member, name: "l", scope: !30, file:
>> !5, line: 52, baseType: !16, size: 60, offset: 4)
>> -!34 = !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs9", scope: !26,
>> file: !5, line: 57, baseType: !14, size: 1, align: 32, offset: 72)
>> +!34 = !DIDerivedType(tag: DW_TAG_member, name: "l2_ofs9", scope: !26,
>> file: !5, line: 57, baseType: !14, size: 1, offset: 72)
>>  !35 = !DIGlobalVariable(name: "l3", scope: !0, file: !5, line: 91, type:
>> !36, isLocal: false, isDefinition: true)
>> -!36 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout3",
>> file: !5, line: 76, size: 128, align: 32, elements: !37)
>> +!36 = !DICompositeType(tag: DW_TAG_structure_type, name: "layout3",
>> file: !5, line: 76, size: 128, elements: !37)
>>  !37 = !{!38, !39, !44}
>> -!38 = !DIDerivedType(tag: DW_TAG_member, name: "l3_ofs0", scope: !36,
>> file: !5, line: 77, baseType: !9, size: 8, align: 8)
>> -!39 = !DIDerivedType(tag: DW_TAG_member, name: "l3_ofs4", scope: !36,
>> file: !5, line: 78, baseType: !40, size: 64, align: 32, offset: 32)
>> -!40 = !DICompositeType(tag: DW_TAG_structure_type, name: "size8_pack4",
>> file: !5, line: 72, size: 64, align: 32, elements: !41)
>> +!38 = !DIDerivedType(tag: DW_TAG_member, name: "l3_ofs0", scope: !36,
>> file: !5, line: 77, baseType: !9, size: 8)
>> +!39 = !DIDerivedType(tag: DW_TAG_member, name: "l3_ofs4", scope: !36,
>> file: !5, line: 78, baseType: !40, size: 64, offset: 32)
>> +!40 = !DICompositeType(tag: DW_TAG_structure_type, name: "size8_pack4",
>> file: !5, line: 72, size: 64, elements: !41)
>>  !41 = !{!42, !43}
>> -!42 = !DIDerivedType(tag: DW_TAG_member, name: "i", scope: !40, file:
>> !5, line: 73, baseType: !14, size: 4, align: 32)
>> +!42 = !DIDerivedType(tag: DW_TAG_member, name: "i", scope: !40, file:
>> !5, line: 73, baseType: !14, size: 4)
>>  !43 = !DIDerivedType(tag: DW_TAG_member, name: "l", scope: !40, file:
>> !5, line: 74, baseType: !16, size: 60, offset: 4)
>> -!44 = !DIDerivedType(tag: DW_TAG_member, name: "l3_ofs12", scope: !36,
>> file: !5, line: 79, baseType: !14, size: 1, align: 32, offset: 96)
>> +!44 = !DIDerivedType(tag: DW_TAG_member, name: "l3_ofs12", scope: !36,
>> file: !5, line: 79, baseType: !14, size: 1, offset: 96)
>>  !45 = !{i32 2, !"Dwarf Version", i32 2}
>>  !46 = !{i32 2, !"Debug Info Version", i32 3}
>>  !47 = !{!"clang version 3.7.0 (trunk 240791) (llvm/trunk 240790)"}
>>
>> Modified: llvm/trunk/unittests/IR/MetadataTest.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/IR/
>> MetadataTest.cpp?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/unittests/IR/MetadataTest.cpp (original)
>> +++ llvm/trunk/unittests/IR/MetadataTest.cpp Wed Oct 19 19:13:12 2016
>> @@ -1824,10 +1824,12 @@ TEST_F(DIGlobalVariableTest, get) {
>>    auto *Expr2 = DIExpression::get(Context, {1, 2, 3});
>>    DIDerivedType *StaticDataMemberDeclaration =
>>        cast<DIDerivedType>(getDerivedType());
>> +  uint64_t AlignInBits = 8;
>>
>>    auto *N = DIGlobalVariable::get(Context, Scope, Name, LinkageName,
>> File, Line,
>>                                    Type, IsLocalToUnit, IsDefinition,
>> -                                  Expr, StaticDataMemberDeclaration);
>> +                                  Expr, StaticDataMemberDeclaration,
>> +                                  AlignInBits);
>>    EXPECT_EQ(dwarf::DW_TAG_variable, N->getTag());
>>    EXPECT_EQ(Scope, N->getScope());
>>    EXPECT_EQ(Name, N->getName());
>> @@ -1839,45 +1841,61 @@ TEST_F(DIGlobalVariableTest, get) {
>>    EXPECT_EQ(IsDefinition, N->isDefinition());
>>    EXPECT_EQ(Expr, N->getExpr());
>>    EXPECT_EQ(StaticDataMemberDeclaration, N->getStaticDataMemberDeclarat
>> ion());
>> +  EXPECT_EQ(AlignInBits, N->getAlignInBits());
>>    EXPECT_EQ(N, DIGlobalVariable::get(Context, Scope, Name, LinkageName,
>> File,
>>                                       Line, Type, IsLocalToUnit,
>> IsDefinition,
>> -                                     Expr, StaticDataMemberDeclaration));
>> +                                     Expr, StaticDataMemberDeclaration,
>> +                                     AlignInBits));
>>
>>    EXPECT_NE(N,
>>              DIGlobalVariable::get(Context, getSubprogram(), Name,
>> LinkageName,
>>                                    File, Line, Type, IsLocalToUnit,
>> IsDefinition,
>> -                                  Expr, StaticDataMemberDeclaration));
>> +                                  Expr, StaticDataMemberDeclaration,
>> +                                  AlignInBits));
>>    EXPECT_NE(N, DIGlobalVariable::get(Context, Scope, "other",
>> LinkageName, File,
>>                                       Line, Type, IsLocalToUnit,
>> IsDefinition,
>> -                                     Expr, StaticDataMemberDeclaration));
>> +                                     Expr, StaticDataMemberDeclaration,
>> +                                     AlignInBits));
>>    EXPECT_NE(N, DIGlobalVariable::get(Context, Scope, Name, "other",
>> File, Line,
>>                                       Type, IsLocalToUnit, IsDefinition,
>> Expr,
>> -                                     StaticDataMemberDeclaration));
>> +                                     StaticDataMemberDeclaration,
>> +                                     AlignInBits));
>>    EXPECT_NE(N,
>>              DIGlobalVariable::get(Context, Scope, Name, LinkageName,
>> getFile(),
>>                                    Line, Type, IsLocalToUnit,
>> IsDefinition, Expr,
>> -                                  StaticDataMemberDeclaration));
>> +                                  StaticDataMemberDeclaration,
>> +                                  AlignInBits));
>>    EXPECT_NE(N,
>>              DIGlobalVariable::get(Context, Scope, Name, LinkageName,
>> File,
>>                                    Line + 1, Type, IsLocalToUnit,
>> IsDefinition,
>> -                                  Expr, StaticDataMemberDeclaration));
>> +                                  Expr, StaticDataMemberDeclaration,
>> +                                  AlignInBits));
>>    EXPECT_NE(N,
>>              DIGlobalVariable::get(Context, Scope, Name, LinkageName,
>> File, Line,
>>                                    getDerivedType(), IsLocalToUnit,
>> IsDefinition,
>> -                                  Expr, StaticDataMemberDeclaration));
>> +                                  Expr, StaticDataMemberDeclaration,
>> +                                  AlignInBits));
>>    EXPECT_NE(N, DIGlobalVariable::get(Context, Scope, Name, LinkageName,
>> File,
>>                                       Line, Type, !IsLocalToUnit,
>> IsDefinition,
>> -                                     Expr, StaticDataMemberDeclaration));
>> +                                     Expr, StaticDataMemberDeclaration,
>> +                                     AlignInBits));
>>    EXPECT_NE(N, DIGlobalVariable::get(Context, Scope, Name, LinkageName,
>> File,
>>                                       Line, Type, IsLocalToUnit,
>> !IsDefinition,
>> -                                     Expr, StaticDataMemberDeclaration));
>> +                                     Expr, StaticDataMemberDeclaration,
>> +                                     AlignInBits));
>>    EXPECT_NE(N, DIGlobalVariable::get(Context, Scope, Name, LinkageName,
>> File,
>>                                       Line, Type, IsLocalToUnit,
>> IsDefinition,
>> -                                     Expr2,
>> StaticDataMemberDeclaration));
>> +                                     Expr2, StaticDataMemberDeclaration,
>> +                                     AlignInBits));
>>    EXPECT_NE(N,
>>              DIGlobalVariable::get(Context, Scope, Name, LinkageName,
>> File, Line,
>>                                    Type, IsLocalToUnit, IsDefinition,
>> Expr,
>> -                                  cast<DIDerivedType>(getDerived
>> Type())));
>> +                                  cast<DIDerivedType>(getDerivedType()),
>> +                                  AlignInBits));
>> +  EXPECT_NE(N, DIGlobalVariable::get(Context, Scope, Name, LinkageName,
>> File,
>> +                                     Line, Type, IsLocalToUnit,
>> IsDefinition,
>> +                                     Expr, StaticDataMemberDeclaration,
>> +                                     (AlignInBits << 1)));
>>
>>    TempDIGlobalVariable Temp = N->clone();
>>    EXPECT_EQ(N, MDNode::replaceWithUniqued(std::move(Temp)));
>> @@ -1893,9 +1911,11 @@ TEST_F(DILocalVariableTest, get) {
>>    DIType *Type = getDerivedType();
>>    unsigned Arg = 6;
>>    DINode::DIFlags Flags = static_cast<DINode::DIFlags>(7);
>> +  uint64_t AlignInBits = 8;
>>
>>    auto *N =
>> -      DILocalVariable::get(Context, Scope, Name, File, Line, Type, Arg,
>> Flags);
>> +      DILocalVariable::get(Context, Scope, Name, File, Line, Type, Arg,
>> Flags,
>> +                           AlignInBits);
>>    EXPECT_TRUE(N->isParameter());
>>    EXPECT_EQ(Scope, N->getScope());
>>    EXPECT_EQ(Name, N->getName());
>> @@ -1904,24 +1924,27 @@ TEST_F(DILocalVariableTest, get) {
>>    EXPECT_EQ(Type, N->getType());
>>    EXPECT_EQ(Arg, N->getArg());
>>    EXPECT_EQ(Flags, N->getFlags());
>> +  EXPECT_EQ(AlignInBits, N->getAlignInBits());
>>    EXPECT_EQ(N, DILocalVariable::get(Context, Scope, Name, File, Line,
>> Type, Arg,
>> -                                    Flags));
>> +                                    Flags, AlignInBits));
>>
>>    EXPECT_FALSE(
>> -      DILocalVariable::get(Context, Scope, Name, File, Line, Type, 0,
>> Flags)
>> -          ->isParameter());
>> +      DILocalVariable::get(Context, Scope, Name, File, Line, Type, 0,
>> Flags,
>> +                           AlignInBits)->isParameter());
>>    EXPECT_NE(N, DILocalVariable::get(Context, getSubprogram(), Name,
>> File, Line,
>> -                                    Type, Arg, Flags));
>> +                                    Type, Arg, Flags, AlignInBits));
>>    EXPECT_NE(N, DILocalVariable::get(Context, Scope, "other", File, Line,
>> Type,
>> -                                    Arg, Flags));
>> +                                    Arg, Flags, AlignInBits));
>>    EXPECT_NE(N, DILocalVariable::get(Context, Scope, Name, getFile(),
>> Line, Type,
>> -                                    Arg, Flags));
>> +                                    Arg, Flags, AlignInBits));
>>    EXPECT_NE(N, DILocalVariable::get(Context, Scope, Name, File, Line +
>> 1, Type,
>> -                                    Arg, Flags));
>> +                                    Arg, Flags, AlignInBits));
>>    EXPECT_NE(N, DILocalVariable::get(Context, Scope, Name, File, Line,
>> -                                    getDerivedType(), Arg, Flags));
>> +                                    getDerivedType(), Arg, Flags,
>> AlignInBits));
>> +  EXPECT_NE(N, DILocalVariable::get(Context, Scope, Name, File, Line,
>> Type,
>> +                                    Arg + 1, Flags, AlignInBits));
>>    EXPECT_NE(N, DILocalVariable::get(Context, Scope, Name, File, Line,
>> Type,
>> -                                    Arg + 1, Flags));
>> +                                    Arg, Flags, (AlignInBits << 1)));
>>
>>    TempDILocalVariable Temp = N->clone();
>>    EXPECT_EQ(N, MDNode::replaceWithUniqued(std::move(Temp)));
>> @@ -1929,17 +1952,17 @@ TEST_F(DILocalVariableTest, get) {
>>
>>  TEST_F(DILocalVariableTest, getArg256) {
>>    EXPECT_EQ(255u, DILocalVariable::get(Context, getSubprogram(), "",
>> getFile(),
>> -                                       0, nullptr, 255, DINode::FlagZero)
>> +                                       0, nullptr, 255,
>> DINode::FlagZero, 0)
>>                        ->getArg());
>>    EXPECT_EQ(256u, DILocalVariable::get(Context, getSubprogram(), "",
>> getFile(),
>> -                                       0, nullptr, 256, DINode::FlagZero)
>> +                                       0, nullptr, 256,
>> DINode::FlagZero, 0)
>>                        ->getArg());
>>    EXPECT_EQ(257u, DILocalVariable::get(Context, getSubprogram(), "",
>> getFile(),
>> -                                       0, nullptr, 257, DINode::FlagZero)
>> +                                       0, nullptr, 257,
>> DINode::FlagZero, 0)
>>                        ->getArg());
>>    unsigned Max = UINT16_MAX;
>>    EXPECT_EQ(Max, DILocalVariable::get(Context, getSubprogram(), "",
>> getFile(),
>> -                                      0, nullptr, Max, DINode::FlagZero)
>> +                                      0, nullptr, Max, DINode::FlagZero,
>> 0)
>>                       ->getArg());
>>  }
>>
>>
>> Modified: llvm/trunk/unittests/Transforms/Utils/Cloning.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Tra
>> nsforms/Utils/Cloning.cpp?rev=284678&r1=284677&r2=284678&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/unittests/Transforms/Utils/Cloning.cpp (original)
>> +++ llvm/trunk/unittests/Transforms/Utils/Cloning.cpp Wed Oct 19
>> 19:13:12 2016
>> @@ -253,8 +253,7 @@ protected:
>>      Instruction* Terminator = IBuilder.CreateRetVoid();
>>
>>      // Create a local variable around the alloca
>> -    auto *IntType =
>> -        DBuilder.createBasicType("int", 32, 0, dwarf::DW_ATE_signed);
>> +    auto *IntType = DBuilder.createBasicType("int", 32,
>> dwarf::DW_ATE_signed);
>>      auto *E = DBuilder.createExpression();
>>      auto *Variable =
>>          DBuilder.createAutoVariable(Subprogram, "x", File, 5, IntType,
>> true);
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>
>
>
> --
> --
> Peter
>



-- 
-- 
Peter
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161020/eb7606ae/attachment-0001.html>


More information about the llvm-commits mailing list