<div dir="ltr">Thanks, here's a reduction:<div><br><div><div>void useit(int*);</div><div>static inline void inlineme() {</div><div>  int x[2];</div><div>  useit(x);</div><div>}</div><div>void f() {</div><div>  inlineme();</div><div>  inlineme();</div><div>}</div></div></div><div><br></div><div>Compile with clang -g -O2 -fsanitize=address. The interesting thing here is that the inliner reuses the same alloca for the two inlined copies of 'x'.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Sep 21, 2017 at 5:07 AM, Daniel Jasper via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: djasper<br>
Date: Thu Sep 21 05:07:33 2017<br>
New Revision: 313876<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=313876&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=313876&view=rev</a><br>
Log:<br>
Revert r313825: "[IR] Add llvm.dbg.addr, a control-dependent version of llvm.dbg.declare"<br>
<br>
.. as well as the two subsequent changes r313826 and r313875.<br>
<br>
This leads to segfaults in combination with ASAN. Will forward repro<br>
instructions to the original author (rnk).<br>
<br>
Removed:<br>
    llvm/trunk/test/DebugInfo/X86/<wbr>dbg-addr-dse.ll<br>
    llvm/trunk/test/DebugInfo/X86/<wbr>dbg-addr.ll<br>
    llvm/trunk/test/DebugInfo/X86/<wbr>sroasplit-dbg-declare.ll<br>
    llvm/trunk/test/Transforms/<wbr>Mem2Reg/dbg-addr-inline-dse.ll<br>
    llvm/trunk/test/Transforms/<wbr>Mem2Reg/dbg-addr.ll<br>
    llvm/trunk/test/Transforms/<wbr>SROA/dbg-addr-diamond.ll<br>
Modified:<br>
    llvm/trunk/docs/<wbr>SourceLevelDebugging.rst<br>
    llvm/trunk/include/llvm/IR/<wbr>IntrinsicInst.h<br>
    llvm/trunk/include/llvm/IR/<wbr>Intrinsics.td<br>
    llvm/trunk/include/llvm/<wbr>Transforms/Utils/Local.h<br>
    llvm/trunk/lib/CodeGen/<wbr>SelectionDAG/<wbr>SelectionDAGBuilder.cpp<br>
    llvm/trunk/lib/IR/DIBuilder.<wbr>cpp<br>
    llvm/trunk/lib/IR/Verifier.cpp<br>
    llvm/trunk/lib/Transforms/<wbr>InstCombine/<wbr>InstructionCombining.cpp<br>
    llvm/trunk/lib/Transforms/<wbr>Scalar/SROA.cpp<br>
    llvm/trunk/lib/Transforms/<wbr>Utils/Local.cpp<br>
    llvm/trunk/lib/Transforms/<wbr>Utils/PromoteMemoryToRegister.<wbr>cpp<br>
    llvm/trunk/test/DebugInfo/X86/<wbr>sroasplit-5.ll<br>
<br>
Modified: llvm/trunk/docs/<wbr>SourceLevelDebugging.rst<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/SourceLevelDebugging.rst?rev=313876&r1=313875&r2=313876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/docs/<wbr>SourceLevelDebugging.rst?rev=<wbr>313876&r1=313875&r2=313876&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/docs/<wbr>SourceLevelDebugging.rst (original)<br>
+++ llvm/trunk/docs/<wbr>SourceLevelDebugging.rst Thu Sep 21 05:07:33 2017<br>
@@ -171,64 +171,35 @@ Debugger intrinsic functions<br>
 ----------------------------<br>
<br>
 LLVM uses several intrinsic functions (name prefixed with "``llvm.dbg``") to<br>
-track source local variables through optimization and code generation.<br>
+provide debug information at various points in generated code.<br>
<br>
-``llvm.dbg.addr``<br>
+``llvm.dbg.declare``<br>
 ^^^^^^^^^^^^^^^^^^^^<br>
<br>
 .. code-block:: llvm<br>
<br>
-  void @llvm.dbg.addr(metadata, metadata, metadata)<br>
+  void @llvm.dbg.declare(metadata, metadata, metadata)<br>
<br>
-This intrinsic provides information about a local element (e.g., variable).<br>
-The first argument is metadata holding the address of variable, typically a<br>
-static alloca in the function entry block.  The second argument is a<br>
-`local variable <LangRef.html#dilocalvariable><wbr>`_ containing a description of<br>
-the variable.  The third argument is a `complex expression<br>
-<LangRef.html#diexpression>`_<wbr>.  An `llvm.dbg.addr` intrinsic describes the<br>
-*address* of a source variable.<br>
+This intrinsic provides information about a local element (e.g., variable).  The<br>
+first argument is metadata holding the alloca for the variable.  The second<br>
+argument is a `local variable <LangRef.html#dilocalvariable><wbr>`_ containing a<br>
+description of the variable.  The third argument is a `complex expression<br>
+<LangRef.html#diexpression>`_<wbr>.  An `llvm.dbg.declare` instrinsic describes the<br>
+*location* of a source variable.<br>
<br>
 .. code-block:: llvm<br>
<br>
     %i.addr = alloca i32, align 4<br>
-    call void @llvm.dbg.addr(metadata i32* %i.addr, metadata !1,<br>
-                             metadata !DIExpression()), !dbg !2<br>
+    call void @llvm.dbg.declare(metadata i32* %i.addr, metadata !1, metadata !2), !dbg !3<br>
     !1 = !DILocalVariable(name: "i", ...) ; int i<br>
-    !2 = !DILocation(...)<br>
+    !2 = !DIExpression()<br>
+    !3 = !DILocation(...)<br>
     ...<br>
     %buffer = alloca [256 x i8], align 8<br>
     ; The address of i is buffer+64.<br>
-    call void @llvm.dbg.addr(metadata [256 x i8]* %buffer, metadata !3,<br>
-                             metadata !DIExpression(DW_OP_plus, 64)), !dbg !4<br>
-    !3 = !DILocalVariable(name: "i", ...) ; int i<br>
-    !4 = !DILocation(...)<br>
-<br>
-A frontend should generate exactly one call to ``llvm.dbg.addr`` at the point<br>
-of declaration of a source variable. Optimization passes that fully promote the<br>
-variable from memory to SSA values will replace this call with possibly<br>
-multiple calls to `llvm.dbg.value`. Passes that delete stores are effectively<br>
-partial promotion, and they will insert a mix of calls to ``llvm.dbg.value``<br>
-and ``llvm.dbg.addr`` to track the source variable value when it is available.<br>
-After optimization, there may be multiple calls to ``llvm.dbg.addr`` describing<br>
-the program points where the variables lives in memory. All calls for the same<br>
-concrete source variable must agree on the memory location.<br>
-<br>
-<br>
-``llvm.dbg.declare``<br>
-^^^^^^^^^^^^^^^^^^^^<br>
-<br>
-.. code-block:: llvm<br>
-<br>
-  void @llvm.dbg.declare(metadata, metadata, metadata)<br>
-<br>
-This intrinsic is identical to `llvm.dbg.addr`, except that there can only be<br>
-one call to `llvm.dbg.declare` for a given concrete `local variable<br>
-<LangRef.html#<wbr>dilocalvariable>`_. It is not control-dependent, meaning that if<br>
-a call to `llvm.dbg.declare` exists and has a valid location argument, that<br>
-address is considered to be the true home of the variable across its entire<br>
-lifetime. This makes it hard for optimizations to preserve accurate debug info<br>
-in the presence of ``llvm.dbg.declare``, so we are transitioning away from it,<br>
-and we plan to deprecate it in future LLVM releases.<br>
+    call void @llvm.dbg.declare(metadata [256 x i8]* %buffer, metadata !1, metadata !2)<br>
+    !1 = !DILocalVariable(name: "i", ...) ; int i<br>
+    !2 = !DIExpression(DW_OP_plus, 64)<br>
<br>
<br>
 ``llvm.dbg.value``<br>
@@ -271,9 +242,6 @@ following C fragment, for example:<br>
   8.    X = Y;<br>
   9.  }<br>
<br>
-.. FIXME: Update the following example to use llvm.dbg.addr once that is the<br>
-   default in clang.<br>
-<br>
 Compiled to LLVM, this function would be represented like this:<br>
<br>
 .. code-block:: text<br>
<br>
Modified: llvm/trunk/include/llvm/IR/<wbr>IntrinsicInst.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/IntrinsicInst.h?rev=313876&r1=313875&r2=313876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/include/<wbr>llvm/IR/IntrinsicInst.h?rev=<wbr>313876&r1=313875&r2=313876&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/include/llvm/IR/<wbr>IntrinsicInst.h (original)<br>
+++ llvm/trunk/include/llvm/IR/<wbr>IntrinsicInst.h Thu Sep 21 05:07:33 2017<br>
@@ -71,12 +71,6 @@ namespace llvm {<br>
     /// variable's value or its address.<br>
     Value *getVariableLocation(bool AllowNullOp = true) const;<br>
<br>
-    /// Does this describe the address of a local variable. True for dbg.addr<br>
-    /// and dbg.declare, but not dbg.value, which describes its value.<br>
-    bool isAddressOfVariable() const {<br>
-      return getIntrinsicID() != Intrinsic::dbg_value;<br>
-    }<br>
-<br>
     DILocalVariable *getVariable() const {<br>
       return cast<DILocalVariable>(<wbr>getRawVariable());<br>
     }<br>
@@ -93,13 +87,11 @@ namespace llvm {<br>
       return cast<MetadataAsValue>(<wbr>getArgOperand(2))-><wbr>getMetadata();<br>
     }<br>
<br>
-    /// \name Casting methods<br>
-    /// @{<br>
+    // Methods for support type inquiry through isa, cast, and dyn_cast:<br>
     static bool classof(const IntrinsicInst *I) {<br>
       switch (I->getIntrinsicID()) {<br>
       case Intrinsic::dbg_declare:<br>
       case Intrinsic::dbg_value:<br>
-      case Intrinsic::dbg_addr:<br>
         return true;<br>
       default: return false;<br>
       }<br>
@@ -107,7 +99,6 @@ namespace llvm {<br>
     static bool classof(const Value *V) {<br>
       return isa<IntrinsicInst>(V) && classof(cast<IntrinsicInst>(V)<wbr>);<br>
     }<br>
-    /// @}<br>
   };<br>
<br>
   /// This represents the llvm.dbg.declare instruction.<br>
@@ -115,30 +106,13 @@ namespace llvm {<br>
   public:<br>
     Value *getAddress() const { return getVariableLocation(); }<br>
<br>
-    /// \name Casting methods<br>
-    /// @{<br>
+    // Methods for support type inquiry through isa, cast, and dyn_cast:<br>
     static bool classof(const IntrinsicInst *I) {<br>
       return I->getIntrinsicID() == Intrinsic::dbg_declare;<br>
     }<br>
     static bool classof(const Value *V) {<br>
       return isa<IntrinsicInst>(V) && classof(cast<IntrinsicInst>(V)<wbr>);<br>
     }<br>
-    /// @}<br>
-  };<br>
-<br>
-  /// This represents the llvm.dbg.addr instruction.<br>
-  class DbgAddrIntrinsic : public DbgInfoIntrinsic {<br>
-  public:<br>
-    Value *getAddress() const { return getVariableLocation(); }<br>
-<br>
-    /// \name Casting methods<br>
-    /// @{<br>
-    static bool classof(const IntrinsicInst *I) {<br>
-      return I->getIntrinsicID() == Intrinsic::dbg_addr;<br>
-    }<br>
-    static bool classof(const Value *V) {<br>
-      return isa<IntrinsicInst>(V) && classof(cast<IntrinsicInst>(V)<wbr>);<br>
-    }<br>
   };<br>
<br>
   /// This represents the llvm.dbg.value instruction.<br>
@@ -148,15 +122,13 @@ namespace llvm {<br>
       return getVariableLocation(/* AllowNullOp = */ false);<br>
     }<br>
<br>
-    /// \name Casting methods<br>
-    /// @{<br>
+    // Methods for support type inquiry through isa, cast, and dyn_cast:<br>
     static bool classof(const IntrinsicInst *I) {<br>
       return I->getIntrinsicID() == Intrinsic::dbg_value;<br>
     }<br>
     static bool classof(const Value *V) {<br>
       return isa<IntrinsicInst>(V) && classof(cast<IntrinsicInst>(V)<wbr>);<br>
     }<br>
-    /// @}<br>
   };<br>
<br>
   /// This is the common base class for constrained floating point intrinsics.<br>
<br>
Modified: llvm/trunk/include/llvm/IR/<wbr>Intrinsics.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Intrinsics.td?rev=313876&r1=313875&r2=313876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/include/<wbr>llvm/IR/Intrinsics.td?rev=<wbr>313876&r1=313875&r2=313876&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/include/llvm/IR/<wbr>Intrinsics.td (original)<br>
+++ llvm/trunk/include/llvm/IR/<wbr>Intrinsics.td Thu Sep 21 05:07:33 2017<br>
@@ -583,16 +583,12 @@ let IntrProperties = [IntrNoMem, IntrSpe<br>
 let IntrProperties = [IntrNoMem, IntrSpeculatable] in {<br>
   def int_dbg_declare      : Intrinsic<[],<br>
                                        [llvm_metadata_ty,<br>
-                                        llvm_metadata_ty,<br>
-                                        llvm_metadata_ty]>;<br>
+                                       llvm_metadata_ty,<br>
+                                       llvm_metadata_ty]>;<br>
   def int_dbg_value        : Intrinsic<[],<br>
                                        [llvm_metadata_ty,<br>
                                         llvm_metadata_ty,<br>
                                         llvm_metadata_ty]>;<br>
-  def int_dbg_addr         : Intrinsic<[],<br>
-                                       [llvm_metadata_ty,<br>
-                                        llvm_metadata_ty,<br>
-                                        llvm_metadata_ty]>;<br>
 }<br>
<br>
 //===------------------ Exception Handling Intrinsics--------------------<wbr>--===//<br>
<br>
Modified: llvm/trunk/include/llvm/<wbr>Transforms/Utils/Local.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Utils/Local.h?rev=313876&r1=313875&r2=313876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/include/<wbr>llvm/Transforms/Utils/Local.h?<wbr>rev=313876&r1=313875&r2=<wbr>313876&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/include/llvm/<wbr>Transforms/Utils/Local.h (original)<br>
+++ llvm/trunk/include/llvm/<wbr>Transforms/Utils/Local.h Thu Sep 21 05:07:33 2017<br>
@@ -16,7 +16,6 @@<br>
 #define LLVM_TRANSFORMS_UTILS_LOCAL_H<br>
<br>
 #include "llvm/ADT/SmallPtrSet.h"<br>
-#include "llvm/ADT/TinyPtrVector.h"<br>
 #include "llvm/Analysis/AliasAnalysis.<wbr>h"<br>
 #include "llvm/IR/DataLayout.h"<br>
 #include "llvm/IR/Dominators.h"<br>
@@ -33,7 +32,6 @@ class BranchInst;<br>
 class Instruction;<br>
 class CallInst;<br>
 class DbgDeclareInst;<br>
-class DbgInfoIntrinsic;<br>
 class DbgValueInst;<br>
 class StoreInst;<br>
 class LoadInst;<br>
@@ -264,28 +262,26 @@ Value *EmitGEPOffset(IRBuilderTy *Builde<br>
 ///<br>
<br>
 /// Inserts a llvm.dbg.value intrinsic before a store to an alloca'd value<br>
-/// that has an associated llvm.dbg.declare or llvm.dbg.addr intrinsic.<br>
-void ConvertDebugDeclareToDebugValu<wbr>e(DbgInfoIntrinsic *DII,<br>
+/// that has an associated llvm.dbg.decl intrinsic.<br>
+void ConvertDebugDeclareToDebugValu<wbr>e(DbgDeclareInst *DDI,<br>
                                      StoreInst *SI, DIBuilder &Builder);<br>
<br>
 /// Inserts a llvm.dbg.value intrinsic before a load of an alloca'd value<br>
-/// that has an associated llvm.dbg.declare or llvm.dbg.addr intrinsic.<br>
-void ConvertDebugDeclareToDebugValu<wbr>e(DbgInfoIntrinsic *DII,<br>
+/// that has an associated llvm.dbg.decl intrinsic.<br>
+void ConvertDebugDeclareToDebugValu<wbr>e(DbgDeclareInst *DDI,<br>
                                      LoadInst *LI, DIBuilder &Builder);<br>
<br>
-/// Inserts a llvm.dbg.value intrinsic after a phi that has an associated<br>
-/// llvm.dbg.declare or llvm.dbg.addr intrinsic.<br>
-void ConvertDebugDeclareToDebugValu<wbr>e(DbgInfoIntrinsic *DII,<br>
+/// Inserts a llvm.dbg.value intrinsic after a phi of an alloca'd value<br>
+/// that has an associated llvm.dbg.decl intrinsic.<br>
+void ConvertDebugDeclareToDebugValu<wbr>e(DbgDeclareInst *DDI,<br>
                                      PHINode *LI, DIBuilder &Builder);<br>
<br>
 /// Lowers llvm.dbg.declare intrinsics into appropriate set of<br>
 /// llvm.dbg.value intrinsics.<br>
 bool LowerDbgDeclare(Function &F);<br>
<br>
-/// Finds all intrinsics declaring local variables as living in the memory that<br>
-/// 'V' points to. This may include a mix of dbg.declare and<br>
-/// dbg.addr intrinsics.<br>
-TinyPtrVector<<wbr>DbgInfoIntrinsic *> FindDbgAddrUses(Value *V);<br>
+/// Finds the llvm.dbg.declare intrinsic corresponding to an alloca, if any.<br>
+DbgDeclareInst *FindAllocaDbgDeclare(Value *V);<br>
<br>
 /// Finds the llvm.dbg.value intrinsics describing a value.<br>
 void findDbgValues(SmallVectorImpl<<wbr>DbgValueInst *> &DbgValues, Value *V);<br>
<br>
Modified: llvm/trunk/lib/CodeGen/<wbr>SelectionDAG/<wbr>SelectionDAGBuilder.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp?rev=313876&r1=313875&r2=313876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/<wbr>CodeGen/SelectionDAG/<wbr>SelectionDAGBuilder.cpp?rev=<wbr>313876&r1=313875&r2=313876&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/CodeGen/<wbr>SelectionDAG/<wbr>SelectionDAGBuilder.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/<wbr>SelectionDAG/<wbr>SelectionDAGBuilder.cpp Thu Sep 21 05:07:33 2017<br>
@@ -5109,48 +5109,37 @@ SelectionDAGBuilder::<wbr>visitIntrinsicCall(<br>
     DAG.setRoot(CallResult.second)<wbr>;<br>
     return nullptr;<br>
   }<br>
-  case Intrinsic::dbg_addr:<br>
   case Intrinsic::dbg_declare: {<br>
-    const DbgInfoIntrinsic &DI = cast<DbgInfoIntrinsic>(I);<br>
+    const DbgDeclareInst &DI = cast<DbgDeclareInst>(I);<br>
     DILocalVariable *Variable = DI.getVariable();<br>
     DIExpression *Expression = DI.getExpression();<br>
+    const Value *Address = DI.getAddress();<br>
     assert(Variable && "Missing variable");<br>
+    if (!Address) {<br>
+      DEBUG(dbgs() << "Dropping debug info for " << DI << "\n");<br>
+      return nullptr;<br>
+    }<br>
<br>
     // Check if address has undef value.<br>
-    const Value *Address = DI.getVariableLocation();<br>
-    if (!Address || isa<UndefValue>(Address) ||<br>
+    if (isa<UndefValue>(Address) ||<br>
         (Address->use_empty() && !isa<Argument>(Address))) {<br>
       DEBUG(dbgs() << "Dropping debug info for " << DI << "\n");<br>
       return nullptr;<br>
     }<br>
<br>
-    bool isParameter = Variable->isParameter() || isa<Argument>(Address);<br>
-<br>
-    // Check if this variable can be described by a frame index, typically<br>
-    // either as a static alloca or a byval parameter.<br>
-    int FI = INT_MAX;<br>
+    // Static allocas are handled more efficiently in the variable frame index<br>
+    // side table.<br>
     if (const auto *AI =<br>
-            dyn_cast<AllocaInst>(Address-><wbr>stripInBoundsConstantOffsets()<wbr>)) {<br>
-      if (AI->isStaticAlloca()) {<br>
-        auto I = FuncInfo.StaticAllocaMap.find(<wbr>AI);<br>
-        if (I != FuncInfo.StaticAllocaMap.end()<wbr>)<br>
-          FI = I->second;<br>
-      }<br>
-    } else if (const auto *Arg = dyn_cast<Argument>(<br>
-                   Address-><wbr>stripInBoundsConstantOffsets()<wbr>)) {<br>
-      FI = FuncInfo.<wbr>getArgumentFrameIndex(Arg);<br>
-    }<br>
+            dyn_cast<AllocaInst>(Address-><wbr>stripInBoundsConstantOffsets()<wbr>))<br>
+      if (AI->isStaticAlloca() && FuncInfo.StaticAllocaMap.<wbr>count(AI))<br>
+        return nullptr;<br>
<br>
-    // llvm.dbg.addr is control dependent and always generates indirect<br>
-    // DBG_VALUE instructions. llvm.dbg.declare is handled as a frame index in<br>
-    // the MachineFunction variable table.<br>
-    if (FI != INT_MAX) {<br>
-      if (Intrinsic == Intrinsic::dbg_addr)<br>
-        DAG.AddDbgValue(DAG.<wbr>getFrameIndexDbgValue(<wbr>Variable, Expression, FI, dl,<br>
-                                                  SDNodeOrder),<br>
-                        getRoot().getNode(), isParameter);<br>
-      return nullptr;<br>
-    }<br>
+    // Byval arguments with frame indices were already handled after argument<br>
+    // lowering and before isel.<br>
+    if (const auto *Arg =<br>
+            dyn_cast<Argument>(Address-><wbr>stripInBoundsConstantOffsets()<wbr>))<br>
+      if (FuncInfo.<wbr>getArgumentFrameIndex(Arg) != INT_MAX)<br>
+        return nullptr;<br>
<br>
     SDValue &N = NodeMap[Address];<br>
     if (!N.getNode() && isa<Argument>(Address))<br>
@@ -5161,6 +5150,7 @@ SelectionDAGBuilder::<wbr>visitIntrinsicCall(<br>
       if (const BitCastInst *BCI = dyn_cast<BitCastInst>(Address)<wbr>)<br>
         Address = BCI->getOperand(0);<br>
       // Parameters are handled specially.<br>
+      bool isParameter = Variable->isParameter() || isa<Argument>(Address);<br>
       auto FINode = dyn_cast<FrameIndexSDNode>(N.<wbr>getNode());<br>
       if (isParameter && FINode) {<br>
         // Byval parameter. We have a frame index at this point.<br>
<br>
Modified: llvm/trunk/lib/IR/DIBuilder.<wbr>cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DIBuilder.cpp?rev=313876&r1=313875&r2=313876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/IR/<wbr>DIBuilder.cpp?rev=313876&r1=<wbr>313875&r2=313876&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/IR/DIBuilder.<wbr>cpp (original)<br>
+++ llvm/trunk/lib/IR/DIBuilder.<wbr>cpp Thu Sep 21 05:07:33 2017<br>
@@ -24,11 +24,6 @@<br>
 using namespace llvm;<br>
 using namespace llvm::dwarf;<br>
<br>
-cl::opt<bool><br>
-    UseDbgAddr("use-dbg-addr",<br>
-                llvm::cl::desc("Use llvm.dbg.addr for all local variables"),<br>
-                cl::init(false));<br>
-<br>
 DIBuilder::DIBuilder(Module &m, bool AllowUnresolvedNodes)<br>
   : M(m), VMContext(M.getContext()), CUNode(nullptr),<br>
       DeclareFn(nullptr), ValueFn(nullptr),<br>
@@ -781,11 +776,6 @@ static Instruction *withDebugLoc(Instruc<br>
   return I;<br>
 }<br>
<br>
-static Function *getDeclareIntrin(Module &M) {<br>
-  return Intrinsic::getDeclaration(&M, UseDbgAddr ? Intrinsic::dbg_addr<br>
-                                                  : Intrinsic::dbg_declare);<br>
-}<br>
-<br>
 Instruction *DIBuilder::insertDeclare(<wbr>Value *Storage, DILocalVariable *VarInfo,<br>
                                       DIExpression *Expr, const DILocation *DL,<br>
                                       Instruction *InsertBefore) {<br>
@@ -795,7 +785,7 @@ Instruction *DIBuilder::insertDeclare(Va<br>
              VarInfo->getScope()-><wbr>getSubprogram() &&<br>
          "Expected matching subprograms");<br>
   if (!DeclareFn)<br>
-    DeclareFn = getDeclareIntrin(M);<br>
+    DeclareFn = Intrinsic::getDeclaration(&M, Intrinsic::dbg_declare);<br>
<br>
   trackIfUnresolved(VarInfo);<br>
   trackIfUnresolved(Expr);<br>
@@ -814,7 +804,7 @@ Instruction *DIBuilder::insertDeclare(Va<br>
              VarInfo->getScope()-><wbr>getSubprogram() &&<br>
          "Expected matching subprograms");<br>
   if (!DeclareFn)<br>
-    DeclareFn = getDeclareIntrin(M);<br>
+    DeclareFn = Intrinsic::getDeclaration(&M, Intrinsic::dbg_declare);<br>
<br>
   trackIfUnresolved(VarInfo);<br>
   trackIfUnresolved(Expr);<br>
<br>
Modified: llvm/trunk/lib/IR/Verifier.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Verifier.cpp?rev=313876&r1=313875&r2=313876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/IR/<wbr>Verifier.cpp?rev=313876&r1=<wbr>313875&r2=313876&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/IR/Verifier.cpp (original)<br>
+++ llvm/trunk/lib/IR/Verifier.cpp Thu Sep 21 05:07:33 2017<br>
@@ -4001,8 +4001,6 @@ void Verifier::<wbr>visitIntrinsicCallSite(In<br>
            "invalid llvm.dbg.declare intrinsic call 1", CS);<br>
     visitDbgIntrinsic("declare", cast<DbgInfoIntrinsic>(*CS.<wbr>getInstruction()));<br>
     break;<br>
-  case Intrinsic::dbg_addr: // llvm.dbg.addr<br>
-    visitDbgIntrinsic("addr", cast<DbgInfoIntrinsic>(*CS.<wbr>getInstruction()));<br>
   case Intrinsic::dbg_value: // llvm.dbg.value<br>
     visitDbgIntrinsic("value", cast<DbgInfoIntrinsic>(*CS.<wbr>getInstruction()));<br>
     break;<br>
<br>
Modified: llvm/trunk/lib/Transforms/<wbr>InstCombine/<wbr>InstructionCombining.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp?rev=313876&r1=313875&r2=313876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/<wbr>Transforms/InstCombine/<wbr>InstructionCombining.cpp?rev=<wbr>313876&r1=313875&r2=313876&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Transforms/<wbr>InstCombine/<wbr>InstructionCombining.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/<wbr>InstCombine/<wbr>InstructionCombining.cpp Thu Sep 21 05:07:33 2017<br>
@@ -2106,10 +2106,10 @@ Instruction *InstCombiner::visitAllocSit<br>
<br>
   // If we are removing an alloca with a dbg.declare, insert dbg.value calls<br>
   // before each store.<br>
-  TinyPtrVector<DbgInfoIntrinsic *> DIIs;<br>
+  DbgDeclareInst *DDI = nullptr;<br>
   std::unique_ptr<DIBuilder> DIB;<br>
   if (isa<AllocaInst>(MI)) {<br>
-    DIIs = FindDbgAddrUses(&MI);<br>
+    DDI = FindAllocaDbgDeclare(&MI);<br>
     DIB.reset(new DIBuilder(*MI.getModule(), /*AllowUnresolved=*/false));<br>
   }<br>
<br>
@@ -2145,9 +2145,8 @@ Instruction *InstCombiner::visitAllocSit<br>
       } else if (isa<BitCastInst>(I) || isa<GetElementPtrInst>(I) ||<br>
                  isa<AddrSpaceCastInst>(I)) {<br>
         replaceInstUsesWith(*I, UndefValue::get(I->getType()))<wbr>;<br>
-      } else if (auto *SI = dyn_cast<StoreInst>(I)) {<br>
-        for (auto *DII : DIIs)<br>
-          ConvertDebugDeclareToDebugValu<wbr>e(DII, SI, *DIB);<br>
+      } else if (DDI && isa<StoreInst>(I)) {<br>
+        ConvertDebugDeclareToDebugValu<wbr>e(DDI, cast<StoreInst>(I), *DIB);<br>
       }<br>
       eraseInstFromFunction(*I);<br>
     }<br>
@@ -2160,8 +2159,8 @@ Instruction *InstCombiner::visitAllocSit<br>
                          None, "", II->getParent());<br>
     }<br>
<br>
-    for (auto *DII : DIIs)<br>
-      eraseInstFromFunction(*DII);<br>
+    if (DDI)<br>
+      eraseInstFromFunction(*DDI);<br>
<br>
     return eraseInstFromFunction(MI);<br>
   }<br>
<br>
Modified: llvm/trunk/lib/Transforms/<wbr>Scalar/SROA.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/SROA.cpp?rev=313876&r1=313875&r2=313876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/<wbr>Transforms/Scalar/SROA.cpp?<wbr>rev=313876&r1=313875&r2=<wbr>313876&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Transforms/<wbr>Scalar/SROA.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/<wbr>Scalar/SROA.cpp Thu Sep 21 05:07:33 2017<br>
@@ -4102,10 +4102,9 @@ bool SROA::splitAlloca(AllocaInst &AI, A<br>
<br>
   // Migrate debug information from the old alloca to the new alloca(s)<br>
   // and the individual partitions.<br>
-  TinyPtrVector<DbgInfoIntrinsic *> DbgDeclares = FindDbgAddrUses(&AI);<br>
-  if (!DbgDeclares.empty()) {<br>
-    auto *Var = DbgDeclares.front()-><wbr>getVariable();<br>
-    auto *Expr = DbgDeclares.front()-><wbr>getExpression();<br>
+  if (DbgDeclareInst *DbgDecl = FindAllocaDbgDeclare(&AI)) {<br>
+    auto *Var = DbgDecl->getVariable();<br>
+    auto *Expr = DbgDecl->getExpression();<br>
     DIBuilder DIB(*AI.getModule(), /*AllowUnresolved*/ false);<br>
     uint64_t AllocaSize = DL.getTypeSizeInBits(AI.<wbr>getAllocatedType());<br>
     for (auto Fragment : Fragments) {<br>
@@ -4137,12 +4136,12 @@ bool SROA::splitAlloca(AllocaInst &AI, A<br>
             DIExpression::<wbr>createFragmentExpression(Expr, Start, Size);<br>
       }<br>
<br>
-      // Remove any existing intrinsics describing the same alloca.<br>
-      for (DbgInfoIntrinsic *OldDII : FindDbgAddrUses(Fragment.<wbr>Alloca))<br>
-        OldDII->eraseFromParent();<br>
+      // Remove any existing dbg.declare intrinsic describing the same alloca.<br>
+      if (DbgDeclareInst *OldDDI = FindAllocaDbgDeclare(Fragment.<wbr>Alloca))<br>
+        OldDDI->eraseFromParent();<br>
<br>
       DIB.insertDeclare(Fragment.<wbr>Alloca, Var, FragmentExpr,<br>
-                        DbgDeclares.front()-><wbr>getDebugLoc(), &AI);<br>
+                        DbgDecl->getDebugLoc(), &AI);<br>
     }<br>
   }<br>
   return Changed;<br>
@@ -4247,15 +4246,6 @@ void SROA::deleteDeadInstructions(<br>
     Instruction *I = DeadInsts.pop_back_val();<br>
     DEBUG(dbgs() << "Deleting dead instruction: " << *I << "\n");<br>
<br>
-    // If the instruction is an alloca, find the possible dbg.declare connected<br>
-    // to it, and remove it too. We must do this before calling RAUW or we will<br>
-    // not be able to find it.<br>
-    if (AllocaInst *AI = dyn_cast<AllocaInst>(I)) {<br>
-      DeletedAllocas.insert(AI);<br>
-      for (DbgInfoIntrinsic *OldDII : FindDbgAddrUses(AI))<br>
-        OldDII->eraseFromParent();<br>
-    }<br>
-<br>
     I->replaceAllUsesWith(<wbr>UndefValue::get(I->getType()))<wbr>;<br>
<br>
     for (Use &Operand : I->operands())<br>
@@ -4266,6 +4256,12 @@ void SROA::deleteDeadInstructions(<br>
           DeadInsts.insert(U);<br>
       }<br>
<br>
+    if (AllocaInst *AI = dyn_cast<AllocaInst>(I)) {<br>
+      DeletedAllocas.insert(AI);<br>
+      if (DbgDeclareInst *DbgDecl = FindAllocaDbgDeclare(AI))<br>
+        DbgDecl->eraseFromParent();<br>
+    }<br>
+<br>
     ++NumDeleted;<br>
     I->eraseFromParent();<br>
   }<br>
<br>
Modified: llvm/trunk/lib/Transforms/<wbr>Utils/Local.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/Local.cpp?rev=313876&r1=313875&r2=313876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/<wbr>Transforms/Utils/Local.cpp?<wbr>rev=313876&r1=313875&r2=<wbr>313876&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Transforms/<wbr>Utils/Local.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/<wbr>Utils/Local.cpp Thu Sep 21 05:07:33 2017<br>
@@ -1098,13 +1098,12 @@ static bool PhiHasDebugValue(DILocalVari<br>
 }<br>
<br>
 /// Inserts a llvm.dbg.value intrinsic before a store to an alloca'd value<br>
-/// that has an associated llvm.dbg.declare or llvm.dbg.addr intrinsic.<br>
-void llvm::<wbr>ConvertDebugDeclareToDebugValu<wbr>e(DbgInfoIntrinsic *DII,<br>
+/// that has an associated llvm.dbg.decl intrinsic.<br>
+void llvm::<wbr>ConvertDebugDeclareToDebugValu<wbr>e(DbgDeclareInst *DDI,<br>
                                            StoreInst *SI, DIBuilder &Builder) {<br>
-  assert(DII-><wbr>isAddressOfVariable());<br>
-  auto *DIVar = DII->getVariable();<br>
+  auto *DIVar = DDI->getVariable();<br>
   assert(DIVar && "Missing variable");<br>
-  auto *DIExpr = DII->getExpression();<br>
+  auto *DIExpr = DDI->getExpression();<br>
   Value *DV = SI->getOperand(0);<br>
<br>
   // If an argument is zero extended then use argument directly. The ZExt<br>
@@ -1115,7 +1114,7 @@ void llvm::<wbr>ConvertDebugDeclareToDebugVal<br>
   if (SExtInst *SExt = dyn_cast<SExtInst>(SI-><wbr>getOperand(0)))<br>
     ExtendedArg = dyn_cast<Argument>(SExt-><wbr>getOperand(0));<br>
   if (ExtendedArg) {<br>
-    // If this DII was already describing only a fragment of a variable, ensure<br>
+    // If this DDI was already describing only a fragment of a variable, ensure<br>
     // that fragment is appropriately narrowed here.<br>
     // But if a fragment wasn't used, describe the value as the original<br>
     // argument (rather than the zext or sext) so that it remains described even<br>
@@ -1128,23 +1127,23 @@ void llvm::<wbr>ConvertDebugDeclareToDebugVal<br>
                                    DIExpr->elements_end() - 3);<br>
       Ops.push_back(dwarf::DW_OP_<wbr>LLVM_fragment);<br>
       Ops.push_back(FragmentOffset);<br>
-      const DataLayout &DL = DII->getModule()-><wbr>getDataLayout();<br>
+      const DataLayout &DL = DDI->getModule()-><wbr>getDataLayout();<br>
       Ops.push_back(DL.<wbr>getTypeSizeInBits(ExtendedArg-<wbr>>getType()));<br>
       DIExpr = Builder.createExpression(Ops);<br>
     }<br>
     DV = ExtendedArg;<br>
   }<br>
   if (!LdStHasDebugValue(DIVar, DIExpr, SI))<br>
-    Builder.<wbr>insertDbgValueIntrinsic(DV, DIVar, DIExpr, DII->getDebugLoc(),<br>
+    Builder.<wbr>insertDbgValueIntrinsic(DV, DIVar, DIExpr, DDI->getDebugLoc(),<br>
                                     SI);<br>
 }<br>
<br>
 /// Inserts a llvm.dbg.value intrinsic before a load of an alloca'd value<br>
-/// that has an associated llvm.dbg.declare or llvm.dbg.addr intrinsic.<br>
-void llvm::<wbr>ConvertDebugDeclareToDebugValu<wbr>e(DbgInfoIntrinsic *DII,<br>
+/// that has an associated llvm.dbg.decl intrinsic.<br>
+void llvm::<wbr>ConvertDebugDeclareToDebugValu<wbr>e(DbgDeclareInst *DDI,<br>
                                            LoadInst *LI, DIBuilder &Builder) {<br>
-  auto *DIVar = DII->getVariable();<br>
-  auto *DIExpr = DII->getExpression();<br>
+  auto *DIVar = DDI->getVariable();<br>
+  auto *DIExpr = DDI->getExpression();<br>
   assert(DIVar && "Missing variable");<br>
<br>
   if (LdStHasDebugValue(DIVar, DIExpr, LI))<br>
@@ -1155,16 +1154,16 @@ void llvm::<wbr>ConvertDebugDeclareToDebugVal<br>
   // preferable to keep tracking both the loaded value and the original<br>
   // address in case the alloca can not be elided.<br>
   Instruction *DbgValue = Builder.<wbr>insertDbgValueIntrinsic(<br>
-      LI, DIVar, DIExpr, DII->getDebugLoc(), (Instruction *)nullptr);<br>
+      LI, DIVar, DIExpr, DDI->getDebugLoc(), (Instruction *)nullptr);<br>
   DbgValue->insertAfter(LI);<br>
 }<br>
<br>
-/// Inserts a llvm.dbg.value intrinsic after a phi that has an associated<br>
-/// llvm.dbg.declare or llvm.dbg.addr intrinsic.<br>
-void llvm::<wbr>ConvertDebugDeclareToDebugValu<wbr>e(DbgInfoIntrinsic *DII,<br>
+/// Inserts a llvm.dbg.value intrinsic after a phi<br>
+/// that has an associated llvm.dbg.decl intrinsic.<br>
+void llvm::<wbr>ConvertDebugDeclareToDebugValu<wbr>e(DbgDeclareInst *DDI,<br>
                                            PHINode *APN, DIBuilder &Builder) {<br>
-  auto *DIVar = DII->getVariable();<br>
-  auto *DIExpr = DII->getExpression();<br>
+  auto *DIVar = DDI->getVariable();<br>
+  auto *DIExpr = DDI->getExpression();<br>
   assert(DIVar && "Missing variable");<br>
<br>
   if (PhiHasDebugValue(DIVar, DIExpr, APN))<br>
@@ -1177,7 +1176,7 @@ void llvm::<wbr>ConvertDebugDeclareToDebugVal<br>
   // insertion point.<br>
   // FIXME: Insert dbg.value markers in the successors when appropriate.<br>
   if (InsertionPt != BB->end())<br>
-    Builder.<wbr>insertDbgValueIntrinsic(APN, DIVar, DIExpr, DII->getDebugLoc(),<br>
+    Builder.<wbr>insertDbgValueIntrinsic(APN, DIVar, DIExpr, DDI->getDebugLoc(),<br>
                                     &*InsertionPt);<br>
 }<br>
<br>
@@ -1232,25 +1231,16 @@ bool llvm::LowerDbgDeclare(Function &F)<br>
   return true;<br>
 }<br>
<br>
-/// Finds all intrinsics declaring local variables as living in the memory that<br>
-/// 'V' points to. This may include a mix of dbg.declare and<br>
-/// dbg.addr intrinsics.<br>
-TinyPtrVector<<wbr>DbgInfoIntrinsic *> llvm::FindDbgAddrUses(Value *V) {<br>
-  auto *L = LocalAsMetadata::getIfExists(<wbr>V);<br>
-  if (!L)<br>
-    return {};<br>
-  auto *MDV = MetadataAsValue::getIfExists(<wbr>V->getContext(), L);<br>
-  if (!MDV)<br>
-    return {};<br>
-<br>
-  TinyPtrVector<DbgInfoIntrinsic *> Declares;<br>
-  for (User *U : MDV->users()) {<br>
-    if (auto *DII = dyn_cast<DbgInfoIntrinsic>(U))<br>
-      if (DII->isAddressOfVariable())<br>
-        Declares.push_back(DII);<br>
-  }<br>
+/// FindAllocaDbgDeclare - Finds the llvm.dbg.declare intrinsic describing the<br>
+/// alloca 'V', if any.<br>
+DbgDeclareInst *llvm::FindAllocaDbgDeclare(<wbr>Value *V) {<br>
+  if (auto *L = LocalAsMetadata::getIfExists(<wbr>V))<br>
+    if (auto *MDV = MetadataAsValue::getIfExists(<wbr>V->getContext(), L))<br>
+      for (User *U : MDV->users())<br>
+        if (DbgDeclareInst *DDI = dyn_cast<DbgDeclareInst>(U))<br>
+          return DDI;<br>
<br>
-  return Declares;<br>
+  return nullptr;<br>
 }<br>
<br>
 void llvm::findDbgValues(<wbr>SmallVectorImpl<DbgValueInst *> &DbgValues, Value *V) {<br>
@@ -1261,22 +1251,23 @@ void llvm::findDbgValues(<wbr>SmallVectorImpl<br>
           DbgValues.push_back(DVI);<br>
 }<br>
<br>
+<br>
 bool llvm::replaceDbgDeclare(Value *Address, Value *NewAddress,<br>
                              Instruction *InsertBefore, DIBuilder &Builder,<br>
                              bool Deref, int Offset) {<br>
-  auto DbgAddrs = FindDbgAddrUses(Address);<br>
-  for (DbgInfoIntrinsic *DII : DbgAddrs) {<br>
-    DebugLoc Loc = DII->getDebugLoc();<br>
-    auto *DIVar = DII->getVariable();<br>
-    auto *DIExpr = DII->getExpression();<br>
-    assert(DIVar && "Missing variable");<br>
-    DIExpr = DIExpression::prepend(DIExpr, Deref, Offset);<br>
-    // Insert llvm.dbg.declare immediately after the original alloca, and remove<br>
-    // old llvm.dbg.declare.<br>
-    Builder.insertDeclare(<wbr>NewAddress, DIVar, DIExpr, Loc, InsertBefore);<br>
-    DII->eraseFromParent();<br>
-  }<br>
-  return !DbgAddrs.empty();<br>
+  DbgDeclareInst *DDI = FindAllocaDbgDeclare(Address);<br>
+  if (!DDI)<br>
+    return false;<br>
+  DebugLoc Loc = DDI->getDebugLoc();<br>
+  auto *DIVar = DDI->getVariable();<br>
+  auto *DIExpr = DDI->getExpression();<br>
+  assert(DIVar && "Missing variable");<br>
+  DIExpr = DIExpression::prepend(DIExpr, Deref, Offset);<br>
+  // Insert llvm.dbg.declare immediately after the original alloca, and remove<br>
+  // old llvm.dbg.declare.<br>
+  Builder.insertDeclare(<wbr>NewAddress, DIVar, DIExpr, Loc, InsertBefore);<br>
+  DDI->eraseFromParent();<br>
+  return true;<br>
 }<br>
<br>
 bool llvm::<wbr>replaceDbgDeclareForAlloca(<wbr>AllocaInst *AI, Value *NewAllocaAddress,<br>
<br>
Modified: llvm/trunk/lib/Transforms/<wbr>Utils/PromoteMemoryToRegister.<wbr>cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/PromoteMemoryToRegister.cpp?rev=313876&r1=313875&r2=313876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/<wbr>Transforms/Utils/<wbr>PromoteMemoryToRegister.cpp?<wbr>rev=313876&r1=313875&r2=<wbr>313876&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/Transforms/<wbr>Utils/PromoteMemoryToRegister.<wbr>cpp (original)<br>
+++ llvm/trunk/lib/Transforms/<wbr>Utils/PromoteMemoryToRegister.<wbr>cpp Thu Sep 21 05:07:33 2017<br>
@@ -103,7 +103,7 @@ struct AllocaInfo {<br>
   bool OnlyUsedInOneBlock;<br>
<br>
   Value *AllocaPointerVal;<br>
-  TinyPtrVector<<wbr>DbgInfoIntrinsic*> DbgDeclares;<br>
+  DbgDeclareInst *DbgDeclare;<br>
<br>
   void clear() {<br>
     DefiningBlocks.clear();<br>
@@ -112,7 +112,7 @@ struct AllocaInfo {<br>
     OnlyBlock = nullptr;<br>
     OnlyUsedInOneBlock = true;<br>
     AllocaPointerVal = nullptr;<br>
-    DbgDeclares.clear();<br>
+    DbgDeclare = nullptr;<br>
   }<br>
<br>
   /// Scan the uses of the specified alloca, filling in the AllocaInfo used<br>
@@ -147,7 +147,7 @@ struct AllocaInfo {<br>
       }<br>
     }<br>
<br>
-    DbgDeclares = FindDbgAddrUses(AI);<br>
+    DbgDeclare = FindAllocaDbgDeclare(AI);<br>
   }<br>
 };<br>
<br>
@@ -245,7 +245,7 @@ struct PromoteMem2Reg {<br>
   /// For each alloca, we keep track of the dbg.declare intrinsic that<br>
   /// describes it, if any, so that we can convert it to a dbg.value<br>
   /// intrinsic if the alloca gets promoted.<br>
-  SmallVector<TinyPtrVector<<wbr>DbgInfoIntrinsic *>, 8> AllocaDbgDeclares;<br>
+  SmallVector<DbgDeclareInst *, 8> AllocaDbgDeclares;<br>
<br>
   /// The set of basic blocks the renamer has already visited.<br>
   ///<br>
@@ -409,11 +409,11 @@ static bool rewriteSingleStoreAlloca(All<br>
<br>
   // Record debuginfo for the store and remove the declaration's<br>
   // debuginfo.<br>
-  for (DbgInfoIntrinsic *DII : Info.DbgDeclares) {<br>
+  if (DbgDeclareInst *DDI = Info.DbgDeclare) {<br>
     DIBuilder DIB(*AI->getModule(), /*AllowUnresolved*/ false);<br>
-    ConvertDebugDeclareToDebugValu<wbr>e(DII, Info.OnlyStore, DIB);<br>
-    DII->eraseFromParent();<br>
-    LBI.deleteValue(DII);<br>
+    ConvertDebugDeclareToDebugValu<wbr>e(DDI, Info.OnlyStore, DIB);<br>
+    DDI->eraseFromParent();<br>
+    LBI.deleteValue(DDI);<br>
   }<br>
   // Remove the (now dead) store and alloca.<br>
   Info.OnlyStore-><wbr>eraseFromParent();<br>
@@ -505,9 +505,9 @@ static bool promoteSingleBlockAlloca(All<br>
   while (!AI->use_empty()) {<br>
     StoreInst *SI = cast<StoreInst>(AI->user_back(<wbr>));<br>
     // Record debuginfo for the store before removing it.<br>
-    for (DbgInfoIntrinsic *DII : Info.DbgDeclares) {<br>
+    if (DbgDeclareInst *DDI = Info.DbgDeclare) {<br>
       DIBuilder DIB(*AI->getModule(), /*AllowUnresolved*/ false);<br>
-      ConvertDebugDeclareToDebugValu<wbr>e(DII, SI, DIB);<br>
+      ConvertDebugDeclareToDebugValu<wbr>e(DDI, SI, DIB);<br>
     }<br>
     SI->eraseFromParent();<br>
     LBI.deleteValue(SI);<br>
@@ -517,9 +517,9 @@ static bool promoteSingleBlockAlloca(All<br>
   LBI.deleteValue(AI);<br>
<br>
   // The alloca's debuginfo can be removed as well.<br>
-  for (DbgInfoIntrinsic *DII : Info.DbgDeclares) {<br>
-    DII->eraseFromParent();<br>
-    LBI.deleteValue(DII);<br>
+  if (DbgDeclareInst *DDI = Info.DbgDeclare) {<br>
+    DDI->eraseFromParent();<br>
+    LBI.deleteValue(DDI);<br>
   }<br>
<br>
   ++NumLocalPromoted;<br>
@@ -587,8 +587,8 @@ void PromoteMem2Reg::run() {<br>
     }<br>
<br>
     // Remember the dbg.declare intrinsic describing this alloca, if any.<br>
-    if (!Info.DbgDeclares.empty())<br>
-      AllocaDbgDeclares[AllocaNum] = Info.DbgDeclares;<br>
+    if (Info.DbgDeclare)<br>
+      AllocaDbgDeclares[AllocaNum] = Info.DbgDeclare;<br>
<br>
     // Keep the reverse mapping of the 'Allocas' array for the rename pass.<br>
     AllocaLookup[Allocas[<wbr>AllocaNum]] = AllocaNum;<br>
@@ -666,9 +666,9 @@ void PromoteMem2Reg::run() {<br>
   }<br>
<br>
   // Remove alloca's dbg.declare instrinsics from the function.<br>
-  for (auto &Declares : AllocaDbgDeclares)<br>
-    for (auto *DII : Declares)<br>
-      DII->eraseFromParent();<br>
+  for (DbgDeclareInst *DDI : AllocaDbgDeclares)<br>
+    if (DDI)<br>
+      DDI->eraseFromParent();<br>
<br>
   // Loop over all of the PHI nodes and see if there are any that we can get<br>
   // rid of because they merge all of the same incoming values.  This can<br>
@@ -895,8 +895,8 @@ NextIteration:<br>
<br>
         // The currently active variable for this block is now the PHI.<br>
         IncomingVals[AllocaNo] = APN;<br>
-        for (DbgInfoIntrinsic *DII : AllocaDbgDeclares[AllocaNo])<br>
-          ConvertDebugDeclareToDebugValu<wbr>e(DII, APN, DIB);<br>
+        if (DbgDeclareInst *DDI = AllocaDbgDeclares[AllocaNo])<br>
+          ConvertDebugDeclareToDebugValu<wbr>e(DDI, APN, DIB);<br>
<br>
         // Get the next phi node.<br>
         ++PNI;<br>
@@ -952,8 +952,8 @@ NextIteration:<br>
       // what value were we writing?<br>
       IncomingVals[ai->second] = SI->getOperand(0);<br>
       // Record debuginfo for the store before removing it.<br>
-      for (DbgInfoIntrinsic *DII : AllocaDbgDeclares[ai->second])<br>
-        ConvertDebugDeclareToDebugValu<wbr>e(DII, SI, DIB);<br>
+      if (DbgDeclareInst *DDI = AllocaDbgDeclares[ai->second])<br>
+        ConvertDebugDeclareToDebugValu<wbr>e(DDI, SI, DIB);<br>
       BB->getInstList().erase(SI);<br>
     }<br>
   }<br>
<br>
Removed: llvm/trunk/test/DebugInfo/X86/<wbr>dbg-addr-dse.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/dbg-addr-dse.ll?rev=313875&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>DebugInfo/X86/dbg-addr-dse.ll?<wbr>rev=313875&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/DebugInfo/X86/<wbr>dbg-addr-dse.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/X86/<wbr>dbg-addr-dse.ll (removed)<br>
@@ -1,100 +0,0 @@<br>
-; RUN: llc %s -o %t.s<br>
-; RUN: llvm-mc %t.s -filetype=obj -triple=x86_64-windows-msvc -o %t.o<br>
-; RUN: FileCheck %s < %t.s --check-prefix=ASM<br>
-; RUN: llvm-dwarfdump %t.o | FileCheck %s --check-prefix=DWARF<br>
-<br>
-; In this example, the variable lives mostly in memory, but at the point of the<br>
-; assignment to global, it lives nowhere, and is described as the constant<br>
-; value 1.<br>
-<br>
-; C source:<br>
-;<br>
-; void escape(int *);<br>
-; extern int global;<br>
-; void f(int x) {<br>
-;   escape(&x);<br>
-;   x = 1; // DSE should delete and insert dbg.value(i32 1)<br>
-;   global = x;<br>
-;   x = 2; // DSE should insert dbg.addr<br>
-;   escape(&x);<br>
-; }<br>
-<br>
-; ModuleID = 'dse.c'<br>
-source_filename = "dse.c"<br>
-target datalayout = "e-m:w-i64:64-f80:128-n8:16:<wbr>32:64-S128"<br>
-target triple = "x86_64-pc-windows-msvc19.0.<wbr>24215"<br>
-<br>
-declare void @llvm.dbg.addr(metadata, metadata, metadata) #2<br>
-declare void @llvm.dbg.value(metadata, metadata, metadata) #2<br>
-declare void @escape(i32*)<br>
-<br>
-@global = external global i32, align 4<br>
-<br>
-; Function Attrs: nounwind uwtable<br>
-define void @f(i32 %x) #0 !dbg !8 {<br>
-entry:<br>
-  %x.addr = alloca i32, align 4<br>
-  store i32 %x, i32* %x.addr, align 4<br>
-  call void @llvm.dbg.addr(metadata i32* %x.addr, metadata !13, metadata !DIExpression()), !dbg !18<br>
-  call void @escape(i32* %x.addr), !dbg !19<br>
-  call void @llvm.dbg.value(metadata i32 1, metadata !13, metadata !DIExpression()), !dbg !20<br>
-  store i32 1, i32* @global, align 4, !dbg !22<br>
-  call void @llvm.dbg.addr(metadata i32* %x.addr, metadata !13, metadata !DIExpression()), !dbg !23<br>
-  store i32 2, i32* %x.addr, align 4, !dbg !23<br>
-  call void @escape(i32* %x.addr), !dbg !24<br>
-  ret void, !dbg !25<br>
-}<br>
-<br>
-; ASM-LABEL: f: # @f<br>
-; ASM: movl    %ecx, [[OFF_X:[0-9]+]](%rsp)<br>
-; ASM: #DEBUG_VALUE: f:x <- [DW_OP_plus_uconst [[OFF_X]]] [%RSP+0]<br>
-; ASM: callq   escape<br>
-; ASM: #DEBUG_VALUE: f:x <- 1<br>
-; ASM: movl    $1, global(%rip)<br>
-; FIXME: Needs a fix to LiveDebugVariables<br>
-; ASMX: #DEBUG_VALUE: f:x <- [DW_OP_plus_uconst [[OFF_X]]] [%RSP+0]<br>
-; ASM: movl    $2, [[OFF_X]](%rsp)<br>
-; ASM: callq   escape<br>
-; ASM: retq<br>
-<br>
-; DWARF:      DW_TAG_formal_parameter<br>
-; DWARF-NEXT:   DW_AT_location        (0x00000000<br>
-; DWARF-NEXT:      {{[^:]*}}: DW_OP_breg7 RSP+{{[0-9]+}}<br>
-; DWARF-NEXT:      {{[^:]*}}: DW_OP_consts +1, DW_OP_stack_value<br>
-; FIXME: Needs a fix to LiveDebugVariables<br>
-; DWARFX-NEXT:      {{[^:]*}}: DW_OP_breg7 RSP+{{[0-9]+}})<br>
-; DWARF-NEXT:   DW_AT_name    ("x")<br>
-<br>
-attributes #0 = { nounwind uwtable }<br>
-attributes #2 = { nounwind readnone speculatable }<br>
-<br>
-!<a href="http://llvm.dbg.cu" rel="noreferrer" target="_blank">llvm.dbg.cu</a> = !{!0}<br>
-!llvm.module.flags = !{!3, !4, !5, !6}<br>
-!llvm.ident = !{!7}<br>
-<br>
-!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 6.0.0 ", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)<br>
-!1 = !DIFile(filename: "dse.c", directory: "C:\5Csrc\5Cllvm-project\<wbr>5Cbuild")<br>
-!2 = !{}<br>
-!3 = !{i32 2, !"Dwarf Version", i32 4}<br>
-!4 = !{i32 2, !"Debug Info Version", i32 3}<br>
-!5 = !{i32 1, !"wchar_size", i32 2}<br>
-!6 = !{i32 7, !"PIC Level", i32 2}<br>
-!7 = !{!"clang version 6.0.0 "}<br>
-!8 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 3, type: !9, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !12)<br>
-!9 = !DISubroutineType(types: !10)<br>
-!10 = !{null, !11}<br>
-!11 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)<br>
-!12 = !{!13}<br>
-!13 = !DILocalVariable(name: "x", arg: 1, scope: !8, file: !1, line: 3, type: !11)<br>
-!14 = !{!15, !15, i64 0}<br>
-!15 = !{!"int", !16, i64 0}<br>
-!16 = !{!"omnipotent char", !17, i64 0}<br>
-!17 = !{!"Simple C/C++ TBAA"}<br>
-!18 = !DILocation(line: 3, column: 12, scope: !8)<br>
-!19 = !DILocation(line: 4, column: 3, scope: !8)<br>
-!20 = !DILocation(line: 5, column: 5, scope: !8)<br>
-!21 = !DILocation(line: 6, column: 12, scope: !8)<br>
-!22 = !DILocation(line: 6, column: 10, scope: !8)<br>
-!23 = !DILocation(line: 7, column: 5, scope: !8)<br>
-!24 = !DILocation(line: 8, column: 3, scope: !8)<br>
-!25 = !DILocation(line: 9, column: 1, scope: !8)<br>
<br>
Removed: llvm/trunk/test/DebugInfo/X86/<wbr>dbg-addr.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/dbg-addr.ll?rev=313875&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>DebugInfo/X86/dbg-addr.ll?rev=<wbr>313875&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/DebugInfo/X86/<wbr>dbg-addr.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/X86/<wbr>dbg-addr.ll (removed)<br>
@@ -1,67 +0,0 @@<br>
-; RUN: llc %s -o %t.s<br>
-; RUN: llvm-mc -triple x86_64--linux %t.s -filetype=obj -o %t.o<br>
-; RUN: FileCheck < %t.s %s<br>
-; RUN: llvm-dwarfdump %t.o | FileCheck %s --check-prefix=DWARF<br>
-<br>
-; Unlike dbg.declare, dbg.addr should be lowered to DBG_VALUE instructions. It<br>
-; is control-dependent.<br>
-<br>
-; CHECK-LABEL: use_dbg_addr:<br>
-; CHECK: #DEBUG_VALUE: use_dbg_addr:o <- [%RSP+0]<br>
-<br>
-; FIXME: Avoid the use of a single-location location list and use<br>
-; DW_AT_start_offset instead.<br>
-<br>
-; DWARF: DW_TAG_variable<br>
-; DWARF-NEXT:              DW_AT_location (0x00000000<br>
-; DWARF-NEXT:                          0x{{.*}} - 0x{{.*}}: DW_OP_breg7 RSP+0)<br>
-; DWARF-NEXT:              DW_AT_name ("o")<br>
-<br>
-<br>
-; ModuleID = 't.c'<br>
-source_filename = "t.c"<br>
-target datalayout = "e-m:e-i64:64-f80:128-n8:16:<wbr>32:64-S128"<br>
-target triple = "x86_64--linux"<br>
-<br>
-%struct.Foo = type { i32 }<br>
-<br>
-; Function Attrs: noinline nounwind uwtable<br>
-define void @use_dbg_addr() #0 !dbg !7 {<br>
-entry:<br>
-  %o = alloca %struct.Foo, align 4<br>
-  call void @llvm.dbg.addr(metadata %struct.Foo* %o, metadata !10, metadata !15), !dbg !16<br>
-  call void @escape_foo(%struct.Foo* %o), !dbg !17<br>
-  ret void, !dbg !18<br>
-}<br>
-<br>
-; Function Attrs: nounwind readnone speculatable<br>
-declare void @llvm.dbg.addr(metadata, metadata, metadata) #1<br>
-<br>
-declare void @escape_foo(%struct.Foo*)<br>
-<br>
-attributes #0 = { noinline nounwind uwtable }<br>
-attributes #1 = { nounwind readnone speculatable }<br>
-<br>
-!<a href="http://llvm.dbg.cu" rel="noreferrer" target="_blank">llvm.dbg.cu</a> = !{!0}<br>
-!llvm.module.flags = !{!3, !4, !5}<br>
-!llvm.ident = !{!6}<br>
-<br>
-!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 6.0.0 ", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)<br>
-!1 = !DIFile(filename: "t.c", directory: "C:\5Csrc\5Cllvm-project\<wbr>5Cbuild")<br>
-!2 = !{}<br>
-!3 = !{i32 2, !"Dwarf Version", i32 4}<br>
-!4 = !{i32 2, !"Debug Info Version", i32 3}<br>
-!5 = !{i32 1, !"wchar_size", i32 4}<br>
-!6 = !{!"clang version 6.0.0 "}<br>
-!7 = distinct !DISubprogram(name: "use_dbg_addr", scope: !1, file: !1, line: 3, type: !8, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: false, unit: !0, variables: !2)<br>
-!8 = !DISubroutineType(types: !9)<br>
-!9 = !{null}<br>
-!10 = !DILocalVariable(name: "o", scope: !7, file: !1, line: 4, type: !11)<br>
-!11 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Foo", file: !1, line: 1, size: 32, elements: !12)<br>
-!12 = !{!13}<br>
-!13 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !11, file: !1, line: 1, baseType: !14, size: 32)<br>
-!14 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)<br>
-!15 = !DIExpression()<br>
-!16 = !DILocation(line: 4, column: 14, scope: !7)<br>
-!17 = !DILocation(line: 5, column: 3, scope: !7)<br>
-!18 = !DILocation(line: 6, column: 1, scope: !7)<br>
<br>
Modified: llvm/trunk/test/DebugInfo/X86/<wbr>sroasplit-5.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/sroasplit-5.ll?rev=313876&r1=313875&r2=313876&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>DebugInfo/X86/sroasplit-5.ll?<wbr>rev=313876&r1=313875&r2=<wbr>313876&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/DebugInfo/X86/<wbr>sroasplit-5.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/X86/<wbr>sroasplit-5.ll Thu Sep 21 05:07:33 2017<br>
@@ -20,10 +20,10 @@ target triple = "x86_64-unknown-linux-gn<br>
 ;<br>
 ; There should be no debug info for the padding.<br>
 ; CHECK-NOT: DW_OP_LLVM_fragment, 56<br>
-; CHECK: DIExpression(DW_OP_LLVM_<wbr>fragment, 0, 32)<br>
-; CHECK-NOT: DW_OP_LLVM_fragment, 56<br>
 ; CHECK: DIExpression(DW_OP_LLVM_<wbr>fragment, 32, 24)<br>
 ; CHECK-NOT: DW_OP_LLVM_fragment, 56<br>
+; CHECK: DIExpression(DW_OP_LLVM_<wbr>fragment, 0, 32)<br>
+; CHECK-NOT: DW_OP_LLVM_fragment, 56<br>
 %struct.prog_src_register = type { i32, i24 }<br>
<br>
 ; Function Attrs: nounwind<br>
<br>
Removed: llvm/trunk/test/DebugInfo/X86/<wbr>sroasplit-dbg-declare.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/sroasplit-dbg-declare.ll?rev=313875&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>DebugInfo/X86/sroasplit-dbg-<wbr>declare.ll?rev=313875&view=<wbr>auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/DebugInfo/X86/<wbr>sroasplit-dbg-declare.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/X86/<wbr>sroasplit-dbg-declare.ll (removed)<br>
@@ -1,59 +0,0 @@<br>
-; RUN: opt -S -sroa -o - %s | FileCheck %s<br>
-<br>
-; SROA should split the alloca in two new ones, each with its own dbg.declare.<br>
-; The original alloca and dbg.declare should be removed.<br>
-<br>
-define void @f1() {<br>
-entry:<br>
-  %0 = alloca [9 x i32]<br>
-  call void @llvm.dbg.declare(metadata [9 x i32]* %0, metadata !11, metadata !DIExpression()), !dbg !17<br>
-  %1 = bitcast [9 x i32]* %0 to i8*<br>
-  call void @llvm.memset.p0i8.i64(i8* %1, i8 0, i64 36, i32 16, i1 true)<br>
-  %2 = getelementptr [9 x i32], [9 x i32]* %0, i32 0, i32 0<br>
-  store volatile i32 1, i32* %2<br>
-  ret void<br>
-}<br>
-<br>
-; Function Attrs: nounwind readnone speculatable<br>
-declare void @llvm.dbg.declare(metadata, metadata, metadata) #1<br>
-<br>
-; Function Attrs: argmemonly nounwind<br>
-declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i32, i1) #0<br>
-<br>
-attributes #0 = { argmemonly nounwind }<br>
-attributes #1 = { nounwind readnone speculatable }<br>
-<br>
-!<a href="http://llvm.dbg.cu" rel="noreferrer" target="_blank">llvm.dbg.cu</a> = !{!0}<br>
-!llvm.module.flags = !{!3, !4, !5}<br>
-!llvm.ident = !{!6}<br>
-<br>
-!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 6.0.0", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)<br>
-!1 = !DIFile(filename: "foo.c", directory: "/bar")<br>
-!2 = !{}<br>
-!3 = !{i32 2, !"Dwarf Version", i32 4}<br>
-!4 = !{i32 2, !"Debug Info Version", i32 3}<br>
-!5 = !{i32 1, !"wchar_size", i32 4}<br>
-!6 = !{!"clang version 6.0.0"}<br>
-!7 = distinct !DISubprogram(name: "f1", scope: !1, file: !1, line: 1, type: !8, isLocal: false, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !10)<br>
-!8 = !DISubroutineType(types: !9)<br>
-!9 = !{null}<br>
-!10 = !{!11}<br>
-!11 = !DILocalVariable(name: "b", scope: !7, file: !1, line: 3, type: !12)<br>
-!12 = !DICompositeType(tag: DW_TAG_array_type, baseType: !13, size: 288, elements: !15)<br>
-!13 = !DIDerivedType(tag: DW_TAG_volatile_type, baseType: !14)<br>
-!14 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)<br>
-!15 = !{!16}<br>
-!16 = !DISubrange(count: 9)<br>
-!17 = !DILocation(line: 3, column: 18, scope: !7)<br>
-<br>
-; CHECK-NOT:  = alloca [9 x i32]<br>
-; CHECK-NOT:  call void @llvm.dbg.declare(metadata [9 x i32]*<br>
-<br>
-; CHECK:      %[[VAR1:.*]] = alloca i32<br>
-; CHECK-NEXT: %[[VAR2:.*]] = alloca [8 x i32]<br>
-; CHECK-NEXT: call void @llvm.dbg.declare(metadata i32* %[[VAR1]]<br>
-; CHECK-NEXT: call void @llvm.dbg.declare(metadata [8 x i32]* %[[VAR2]]<br>
-<br>
-; CHECK-NOT:  = alloca [9 x i32]<br>
-; CHECK-NOT:  call void @llvm.dbg.declare(metadata [9 x i32]*<br>
-<br>
<br>
Removed: llvm/trunk/test/Transforms/<wbr>Mem2Reg/dbg-addr-inline-dse.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Mem2Reg/dbg-addr-inline-dse.ll?rev=313875&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>Transforms/Mem2Reg/dbg-addr-<wbr>inline-dse.ll?rev=313875&view=<wbr>auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/Transforms/<wbr>Mem2Reg/dbg-addr-inline-dse.ll (original)<br>
+++ llvm/trunk/test/Transforms/<wbr>Mem2Reg/dbg-addr-inline-dse.ll (removed)<br>
@@ -1,94 +0,0 @@<br>
-; RUN: opt -mem2reg -S < %s | FileCheck %s -implicit-check-not="call void @llvm.dbg.addr"<br>
-<br>
-; This example is intended to simulate this pass pipeline, which may not exist<br>
-; in practice:<br>
-; 1. DSE f from the original C source<br>
-; 2. Inline escape<br>
-; 3. mem2reg<br>
-; This exercises the corner case of multiple llvm.dbg.addr intrinsics.<br>
-<br>
-; C source:<br>
-;<br>
-; void escape(int *px) { ++*px; }<br>
-; extern int global;<br>
-; void f(int x) {<br>
-;   escape(&x);<br>
-;   x = 1; // DSE should delete and insert dbg.value(i32 1)<br>
-;   global = x;<br>
-;   x = 2; // DSE should insert dbg.addr<br>
-;   escape(&x);<br>
-; }<br>
-<br>
-; ModuleID = 'dse.c'<br>
-source_filename = "dse.c"<br>
-target datalayout = "e-m:w-i64:64-f80:128-n8:16:<wbr>32:64-S128"<br>
-target triple = "x86_64-pc-windows-msvc19.0.<wbr>24215"<br>
-<br>
-declare void @llvm.dbg.addr(metadata, metadata, metadata) #2<br>
-declare void @llvm.dbg.value(metadata, metadata, metadata) #2<br>
-<br>
-@global = external global i32, align 4<br>
-<br>
-; Function Attrs: nounwind uwtable<br>
-define void @f(i32 %x) #0 !dbg !8 {<br>
-entry:<br>
-  %x.addr = alloca i32, align 4<br>
-  store i32 %x, i32* %x.addr, align 4<br>
-  call void @llvm.dbg.addr(metadata i32* %x.addr, metadata !13, metadata !DIExpression()), !dbg !18<br>
-  %ld.1 = load i32, i32* %x.addr, align 4, !dbg !19<br>
-  %inc.1 = add nsw i32 %ld.1, 1, !dbg !19<br>
-  store i32 %inc.1, i32* %x.addr, align 4, !dbg !19<br>
-  call void @llvm.dbg.value(metadata i32 1, metadata !13, metadata !DIExpression()), !dbg !20<br>
-  store i32 1, i32* @global, align 4, !dbg !22<br>
-  call void @llvm.dbg.addr(metadata i32* %x.addr, metadata !13, metadata !DIExpression()), !dbg !23<br>
-  store i32 2, i32* %x.addr, align 4, !dbg !23<br>
-  %ld.2 = load i32, i32* %x.addr, align 4, !dbg !19<br>
-  %inc.2 = add nsw i32 %ld.2, 1, !dbg !19<br>
-  store i32 %inc.2, i32* %x.addr, align 4, !dbg !19<br>
-  ret void, !dbg !25<br>
-}<br>
-<br>
-; CHECK-LABEL: define void @f(i32 %x)<br>
-; CHECK: call void @llvm.dbg.value(metadata i32 %x, metadata !13, metadata !DIExpression())<br>
-; CHECK: %inc.1 = add nsw i32 %x, 1<br>
-; CHECK: call void @llvm.dbg.value(metadata i32 %inc.1, metadata !13, metadata !DIExpression())<br>
-; CHECK: call void @llvm.dbg.value(metadata i32 1, metadata !13, metadata !DIExpression())<br>
-; CHECK: store i32 1, i32* @global, align 4<br>
-; CHECK: call void @llvm.dbg.value(metadata i32 2, metadata !13, metadata !DIExpression())<br>
-; CHECK: %inc.2 = add nsw i32 2, 1<br>
-; CHECK: call void @llvm.dbg.value(metadata i32 %inc.2, metadata !13, metadata !DIExpression())<br>
-; CHECK: ret void<br>
-<br>
-attributes #0 = { nounwind uwtable }<br>
-attributes #2 = { nounwind readnone speculatable }<br>
-<br>
-!<a href="http://llvm.dbg.cu" rel="noreferrer" target="_blank">llvm.dbg.cu</a> = !{!0}<br>
-!llvm.module.flags = !{!3, !4, !5, !6}<br>
-!llvm.ident = !{!7}<br>
-<br>
-!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 6.0.0 ", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)<br>
-!1 = !DIFile(filename: "dse.c", directory: "C:\5Csrc\5Cllvm-project\<wbr>5Cbuild")<br>
-!2 = !{}<br>
-!3 = !{i32 2, !"Dwarf Version", i32 4}<br>
-!4 = !{i32 2, !"Debug Info Version", i32 3}<br>
-!5 = !{i32 1, !"wchar_size", i32 2}<br>
-!6 = !{i32 7, !"PIC Level", i32 2}<br>
-!7 = !{!"clang version 6.0.0 "}<br>
-!8 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 3, type: !9, isLocal: false, isDefinition: true, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !12)<br>
-!9 = !DISubroutineType(types: !10)<br>
-!10 = !{null, !11}<br>
-!11 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)<br>
-!12 = !{!13}<br>
-!13 = !DILocalVariable(name: "x", arg: 1, scope: !8, file: !1, line: 3, type: !11)<br>
-!14 = !{!15, !15, i64 0}<br>
-!15 = !{!"int", !16, i64 0}<br>
-!16 = !{!"omnipotent char", !17, i64 0}<br>
-!17 = !{!"Simple C/C++ TBAA"}<br>
-!18 = !DILocation(line: 3, column: 12, scope: !8)<br>
-!19 = !DILocation(line: 4, column: 3, scope: !8)<br>
-!20 = !DILocation(line: 5, column: 5, scope: !8)<br>
-!21 = !DILocation(line: 6, column: 12, scope: !8)<br>
-!22 = !DILocation(line: 6, column: 10, scope: !8)<br>
-!23 = !DILocation(line: 7, column: 5, scope: !8)<br>
-!24 = !DILocation(line: 8, column: 3, scope: !8)<br>
-!25 = !DILocation(line: 9, column: 1, scope: !8)<br>
<br>
Removed: llvm/trunk/test/Transforms/<wbr>Mem2Reg/dbg-addr.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Mem2Reg/dbg-addr.ll?rev=313875&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>Transforms/Mem2Reg/dbg-addr.<wbr>ll?rev=313875&view=auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/Transforms/<wbr>Mem2Reg/dbg-addr.ll (original)<br>
+++ llvm/trunk/test/Transforms/<wbr>Mem2Reg/dbg-addr.ll (removed)<br>
@@ -1,91 +0,0 @@<br>
-; RUN: opt -mem2reg -S < %s | FileCheck %s<br>
-<br>
-; ModuleID = 'newvars.c'<br>
-source_filename = "newvars.c"<br>
-target datalayout = "e-m:w-i64:64-f80:128-n8:16:<wbr>32:64-S128"<br>
-target triple = "x86_64-pc-windows-msvc19.0.<wbr>24215"<br>
-<br>
-; Function Attrs: nounwind uwtable<br>
-define i32 @if_else(i32 %cond, i32 %a, i32 %b) !dbg !8 {<br>
-entry:<br>
-  %x = alloca i32, align 4<br>
-  call void @llvm.dbg.addr(metadata i32* %x, metadata !16, metadata !DIExpression()), !dbg !26<br>
-  store i32 %a, i32* %x, align 4, !dbg !26, !tbaa !17<br>
-  %tobool = icmp ne i32 %cond, 0, !dbg !28<br>
-  br i1 %tobool, label %if.then, label %if.else, !dbg !30<br>
-<br>
-if.then:                                          ; preds = %entry<br>
-  store i32 0, i32* %x, align 4, !dbg !31, !tbaa !17<br>
-  br label %if.end, !dbg !33<br>
-<br>
-if.else:                                          ; preds = %entry<br>
-  store i32 %b, i32* %x, align 4, !dbg !36, !tbaa !17<br>
-  br label %if.end<br>
-<br>
-if.end:                                           ; preds = %if.else, %if.then<br>
-  %rv = load i32, i32* %x, align 4, !dbg !37, !tbaa !17<br>
-  ret i32 %rv, !dbg !39<br>
-}<br>
-<br>
-; CHECK-LABEL: define i32 @if_else({{.*}})<br>
-; CHECK: entry:<br>
-; CHECK-NOT:   alloca i32<br>
-; CHECK:   call void @llvm.dbg.value(metadata i32 %a, metadata ![[X_LOCAL:[0-9]+]], metadata !DIExpression())<br>
-; CHECK: if.then:                                          ; preds = %entry<br>
-; CHECK:   call void @llvm.dbg.value(metadata i32 0, metadata ![[X_LOCAL]], metadata !DIExpression())<br>
-; CHECK: if.else:                                          ; preds = %entry<br>
-; CHECK:   call void @llvm.dbg.value(metadata i32 %b, metadata ![[X_LOCAL]], metadata !DIExpression())<br>
-; CHECK: if.end:                                           ; preds = %if.else, %if.then<br>
-; CHECK:   %[[PHI:[^ ]*]] = phi i32 [ 0, %if.then ], [ %b, %if.else ]<br>
-; CHECK:   call void @llvm.dbg.value(metadata i32 %[[PHI]], metadata ![[X_LOCAL]], metadata !DIExpression())<br>
-; CHECK:   ret i32<br>
-<br>
-; CHECK: ![[X_LOCAL]] = !DILocalVariable(name: "x", {{.*}})<br>
-<br>
-; Function Attrs: nounwind readnone speculatable<br>
-declare void @llvm.dbg.declare(metadata, metadata, metadata)<br>
-declare void @llvm.dbg.addr(metadata, metadata, metadata)<br>
-<br>
-!<a href="http://llvm.dbg.cu" rel="noreferrer" target="_blank">llvm.dbg.cu</a> = !{!0}<br>
-!llvm.module.flags = !{!3, !4, !5, !6}<br>
-!llvm.ident = !{!7}<br>
-<br>
-!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 6.0.0 ", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)<br>
-!1 = !DIFile(filename: "newvars.c", directory: "C:\5Csrc\5Cllvm-project\<wbr>5Cbuild")<br>
-!2 = !{}<br>
-!3 = !{i32 2, !"Dwarf Version", i32 4}<br>
-!4 = !{i32 2, !"Debug Info Version", i32 3}<br>
-!5 = !{i32 1, !"wchar_size", i32 2}<br>
-!6 = !{i32 7, !"PIC Level", i32 2}<br>
-!7 = !{!"clang version 6.0.0 "}<br>
-!8 = distinct !DISubprogram(name: "if_else", scope: !1, file: !1, line: 1, type: !9, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !12)<br>
-!9 = !DISubroutineType(types: !10)<br>
-!10 = !{!11, !11, !11, !11}<br>
-!11 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)<br>
-!12 = !{!13, !14, !15, !16}<br>
-!13 = !DILocalVariable(name: "b", arg: 3, scope: !8, file: !1, line: 1, type: !11)<br>
-!14 = !DILocalVariable(name: "a", arg: 2, scope: !8, file: !1, line: 1, type: !11)<br>
-!15 = !DILocalVariable(name: "cond", arg: 1, scope: !8, file: !1, line: 1, type: !11)<br>
-!16 = !DILocalVariable(name: "x", scope: !8, file: !1, line: 2, type: !11)<br>
-!17 = !{!18, !18, i64 0}<br>
-!18 = !{!"int", !19, i64 0}<br>
-!19 = !{!"omnipotent char", !20, i64 0}<br>
-!20 = !{!"Simple C/C++ TBAA"}<br>
-!22 = !DILocation(line: 1, column: 34, scope: !8)<br>
-!23 = !DILocation(line: 1, column: 27, scope: !8)<br>
-!24 = !DILocation(line: 1, column: 17, scope: !8)<br>
-!25 = !DILocation(line: 2, column: 3, scope: !8)<br>
-!26 = !DILocation(line: 2, column: 7, scope: !8)<br>
-!27 = !DILocation(line: 2, column: 11, scope: !8)<br>
-!28 = !DILocation(line: 3, column: 7, scope: !29)<br>
-!29 = distinct !DILexicalBlock(scope: !8, file: !1, line: 3, column: 7)<br>
-!30 = !DILocation(line: 3, column: 7, scope: !8)<br>
-!31 = !DILocation(line: 4, column: 7, scope: !32)<br>
-!32 = distinct !DILexicalBlock(scope: !29, file: !1, line: 3, column: 13)<br>
-!33 = !DILocation(line: 5, column: 3, scope: !32)<br>
-!34 = !DILocation(line: 6, column: 9, scope: !35)<br>
-!35 = distinct !DILexicalBlock(scope: !29, file: !1, line: 5, column: 10)<br>
-!36 = !DILocation(line: 6, column: 7, scope: !35)<br>
-!37 = !DILocation(line: 8, column: 10, scope: !8)<br>
-!38 = !DILocation(line: 9, column: 1, scope: !8)<br>
-!39 = !DILocation(line: 8, column: 3, scope: !8)<br>
<br>
Removed: llvm/trunk/test/Transforms/<wbr>SROA/dbg-addr-diamond.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SROA/dbg-addr-diamond.ll?rev=313875&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>Transforms/SROA/dbg-addr-<wbr>diamond.ll?rev=313875&view=<wbr>auto</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/Transforms/<wbr>SROA/dbg-addr-diamond.ll (original)<br>
+++ llvm/trunk/test/Transforms/<wbr>SROA/dbg-addr-diamond.ll (removed)<br>
@@ -1,127 +0,0 @@<br>
-; RUN: opt -use-dbg-addr -sroa -S < %s | FileCheck %s<br>
-<br>
-; ModuleID = '<stdin>'<br>
-source_filename = "newvars.c"<br>
-target datalayout = "e-m:w-i64:64-f80:128-n8:16:<wbr>32:64-S128"<br>
-target triple = "x86_64-pc-windows-msvc19.0.<wbr>24215"<br>
-<br>
-%struct.Pair = type { i32, i32 }<br>
-<br>
-@pair = internal global %struct.Pair zeroinitializer<br>
-<br>
-; Function Attrs: nounwind uwtable<br>
-define void @if_else(i32 %cond, i32 %a, i32 %b) !dbg !8 {<br>
-entry:<br>
-  %p = alloca %struct.Pair, align 4<br>
-  %0 = bitcast %struct.Pair* %p to i8*, !dbg !25<br>
-  call void @llvm.dbg.addr(metadata %struct.Pair* %p, metadata !20, metadata !DIExpression()), !dbg !26<br>
-  %x = getelementptr inbounds %struct.Pair, %struct.Pair* %p, i32 0, i32 0, !dbg !27<br>
-  store i32 %a, i32* %x, align 4, !dbg !28<br>
-  %y = getelementptr inbounds %struct.Pair, %struct.Pair* %p, i32 0, i32 1, !dbg !34<br>
-  store i32 %b, i32* %y, align 4, !dbg !35<br>
-  %tobool = icmp ne i32 %cond, 0, !dbg !37<br>
-  br i1 %tobool, label %if.then, label %if.else, !dbg !39<br>
-<br>
-if.then:                                          ; preds = %entry<br>
-  %x1 = getelementptr inbounds %struct.Pair, %struct.Pair* %p, i32 0, i32 0, !dbg !40<br>
-  store i32 0, i32* %x1, align 4, !dbg !42<br>
-  %y2 = getelementptr inbounds %struct.Pair, %struct.Pair* %p, i32 0, i32 1, !dbg !43<br>
-  store i32 %a, i32* %y2, align 4, !dbg !44<br>
-  br label %if.end, !dbg !45<br>
-<br>
-if.else:                                          ; preds = %entry<br>
-  %x3 = getelementptr inbounds %struct.Pair, %struct.Pair* %p, i32 0, i32 0, !dbg !46<br>
-  store i32 %b, i32* %x3, align 4, !dbg !48<br>
-  %y4 = getelementptr inbounds %struct.Pair, %struct.Pair* %p, i32 0, i32 1, !dbg !49<br>
-  store i32 0, i32* %y4, align 4, !dbg !50<br>
-  br label %if.end<br>
-<br>
-if.end:                                           ; preds = %if.else, %if.then<br>
-  %1 = bitcast %struct.Pair* %p to i8*, !dbg !51<br>
-  %2 = bitcast %struct.Pair* @pair to i8*, !dbg !51<br>
-  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %1, i64 8, i32 4, i1 false), !dbg !51<br>
-  ret void<br>
-}<br>
-<br>
-; CHECK-LABEL: define void @if_else(i32 %cond, i32 %a, i32 %b)<br>
-; CHECK: entry:<br>
-; CHECK:   call void @llvm.dbg.value(metadata i32 %a, metadata ![[PVAR:[0-9]+]], metadata ![[XFRAG:DIExpression\(DW_OP_<wbr>LLVM_fragment, 0, 32\)]])<br>
-; CHECK:   call void @llvm.dbg.value(metadata i32 %b, metadata ![[PVAR]], metadata ![[YFRAG:DIExpression\(DW_OP_<wbr>LLVM_fragment, 32, 32\)]])<br>
-; CHECK: if.then:<br>
-; CHECK:   call void @llvm.dbg.value(metadata i32 0, metadata ![[PVAR]], metadata ![[XFRAG]])<br>
-; CHECK:   call void @llvm.dbg.value(metadata i32 %a, metadata ![[PVAR]], metadata ![[YFRAG]])<br>
-; CHECK: if.else:<br>
-; CHECK:   call void @llvm.dbg.value(metadata i32 %b, metadata ![[PVAR]], metadata ![[XFRAG]])<br>
-; CHECK:   call void @llvm.dbg.value(metadata i32 0, metadata ![[PVAR]], metadata ![[YFRAG]])<br>
-; CHECK: if.end:<br>
-; CHECK:   %p.sroa.4.0 = phi i32 [ %a, %if.then ], [ 0, %if.else ]<br>
-; CHECK:   %p.sroa.0.0 = phi i32 [ 0, %if.then ], [ %b, %if.else ]<br>
-; CHECK:   call void @llvm.dbg.value(metadata i32 %p.sroa.0.0, metadata ![[PVAR]], metadata ![[XFRAG]])<br>
-; CHECK:   call void @llvm.dbg.value(metadata i32 %p.sroa.4.0, metadata ![[PVAR]], metadata ![[YFRAG]])<br>
-<br>
-; CHECK: ![[PVAR]] = !DILocalVariable(name: "p", {{.*}})<br>
-<br>
-; Function Attrs: argmemonly nounwind<br>
-declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i32, i1) #2<br>
-<br>
-; Function Attrs: nounwind readnone speculatable<br>
-declare void @llvm.dbg.addr(metadata, metadata, metadata)<br>
-<br>
-!<a href="http://llvm.dbg.cu" rel="noreferrer" target="_blank">llvm.dbg.cu</a> = !{!0}<br>
-!llvm.module.flags = !{!3, !4, !5, !6}<br>
-!llvm.ident = !{!7}<br>
-<br>
-!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 6.0.0 ", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)<br>
-!1 = !DIFile(filename: "newvars.c", directory: "C:\5Csrc\5Cllvm-project\<wbr>5Cbuild")<br>
-!2 = !{}<br>
-!3 = !{i32 2, !"Dwarf Version", i32 4}<br>
-!4 = !{i32 2, !"Debug Info Version", i32 3}<br>
-!5 = !{i32 1, !"wchar_size", i32 2}<br>
-!6 = !{i32 7, !"PIC Level", i32 2}<br>
-!7 = !{!"clang version 6.0.0 "}<br>
-!8 = distinct !DISubprogram(name: "if_else", scope: !1, file: !1, line: 2, type: !9, isLocal: false, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: true, unit: !0, variables: !16)<br>
-!9 = !DISubroutineType(types: !10)<br>
-!10 = !{!11, !14, !14, !14}<br>
-!11 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Pair", file: !1, line: 1, size: 64, elements: !12)<br>
-!12 = !{!13, !15}<br>
-!13 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !11, file: !1, line: 1, baseType: !14, size: 32)<br>
-!14 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)<br>
-!15 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !11, file: !1, line: 1, baseType: !14, size: 32, offset: 32)<br>
-!16 = !{!17, !18, !19, !20}<br>
-!17 = !DILocalVariable(name: "b", arg: 3, scope: !8, file: !1, line: 2, type: !14)<br>
-!18 = !DILocalVariable(name: "a", arg: 2, scope: !8, file: !1, line: 2, type: !14)<br>
-!19 = !DILocalVariable(name: "cond", arg: 1, scope: !8, file: !1, line: 2, type: !14)<br>
-!20 = !DILocalVariable(name: "p", scope: !8, file: !1, line: 3, type: !11)<br>
-!22 = !DILocation(line: 2, column: 42, scope: !8)<br>
-!23 = !DILocation(line: 2, column: 35, scope: !8)<br>
-!24 = !DILocation(line: 2, column: 25, scope: !8)<br>
-!25 = !DILocation(line: 3, column: 3, scope: !8)<br>
-!26 = !DILocation(line: 3, column: 15, scope: !8)<br>
-!27 = !DILocation(line: 4, column: 5, scope: !8)<br>
-!28 = !DILocation(line: 4, column: 7, scope: !8)<br>
-!29 = !{!30, !31, i64 0}<br>
-!30 = !{!"Pair", !31, i64 0, !31, i64 4}<br>
-!31 = !{!"int", !32, i64 0}<br>
-!32 = !{!"omnipotent char", !33, i64 0}<br>
-!33 = !{!"Simple C/C++ TBAA"}<br>
-!34 = !DILocation(line: 5, column: 5, scope: !8)<br>
-!35 = !DILocation(line: 5, column: 7, scope: !8)<br>
-!36 = !{!30, !31, i64 4}<br>
-!37 = !DILocation(line: 6, column: 7, scope: !38)<br>
-!38 = distinct !DILexicalBlock(scope: !8, file: !1, line: 6, column: 7)<br>
-!39 = !DILocation(line: 6, column: 7, scope: !8)<br>
-!40 = !DILocation(line: 7, column: 7, scope: !41)<br>
-!41 = distinct !DILexicalBlock(scope: !38, file: !1, line: 6, column: 13)<br>
-!42 = !DILocation(line: 7, column: 9, scope: !41)<br>
-!43 = !DILocation(line: 8, column: 7, scope: !41)<br>
-!44 = !DILocation(line: 8, column: 9, scope: !41)<br>
-!45 = !DILocation(line: 9, column: 3, scope: !41)<br>
-!46 = !DILocation(line: 10, column: 7, scope: !47)<br>
-!47 = distinct !DILexicalBlock(scope: !38, file: !1, line: 9, column: 10)<br>
-!48 = !DILocation(line: 10, column: 9, scope: !47)<br>
-!49 = !DILocation(line: 11, column: 7, scope: !47)<br>
-!50 = !DILocation(line: 11, column: 9, scope: !47)<br>
-!51 = !DILocation(line: 13, column: 10, scope: !8)<br>
-!52 = !{i64 0, i64 4, !53, i64 4, i64 4, !53}<br>
-!53 = !{!31, !31, i64 0}<br>
-!54 = !DILocation(line: 14, column: 1, scope: !8)<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>