[llvm] r248010 - SelectionDAG: Introduce PersistentID to SDNode for assert builds.

Reid Kleckner via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 17 17:24:21 PST 2015


MSan says that PersistentID is uninitialized sometimes:
Initial selection DAG: BB#0 'test:'
SelectionDAG has 10 nodes:
  t==15698==WARNING: MemorySanitizer: use-of-uninitialized-value
    #0 0x431a2a8 in operator<<
/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm/lib/Support/raw_ostream.cpp:110:7
    #1 0x431a2a8 in llvm::raw_ostream::operator<<(long)
/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm/lib/Support/raw_ostream.cpp:131
    #2 0x3f8b9b0 in operator<<
/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm/include/llvm/Support/raw_ostream.h:201:12
    #3 0x3f8b9b0 in print
/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp:378
    #4 0x3f8b9b0 in operator<<
/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp:386
    #5 0x3f8b9b0 in llvm::SDNode::printr(llvm::raw_ostream&,
llvm::SelectionDAG const*) const
/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp:619
    #6 0x3f83d7f in llvm::SDNode::print(llvm::raw_ostream&,
llvm::SelectionDAG const*) const
/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp:720:3
    #7 0x3f8b776 in dump
/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp:393:3
    #8 0x3f8b776 in DumpNodes(llvm::SDNode const*, unsigned int,
llvm::SelectionDAG const*)
/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp:600
    #9 0x3f8b350 in llvm::SelectionDAG::dump() const
/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp:611:7
    #10 0x3f9d6d1 in llvm::SelectionDAGISel::CodeGenAndEmitDAG()
/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:693:3
    #11 0x3f9a59d in
llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&)
/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1317:7
    #12 0x3f910f8 in
llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&)
/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:466:3
    #13 0x2195e57 in (anonymous
namespace)::X86DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&)
/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp:171:7
    #14 0x2d863ca in
llvm::MachineFunctionPass::runOnFunction(llvm::Function&)
/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm/lib/CodeGen/MachineFunctionPass.cpp:43:10
    #15 0x365933f in llvm::FPPassManager::runOnFunction(llvm::Function&)
/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm/lib/IR/LegacyPassManager.cpp:1521:23
    #16 0x36599d7 in llvm::FPPassManager::runOnModule(llvm::Module&)
/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm/lib/IR/LegacyPassManager.cpp:1542:16
    #17 0x365ad18 in runOnModule
/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm/lib/IR/LegacyPassManager.cpp:1598:23
    #18 0x365ad18 in llvm::legacy::PassManagerImpl::run(llvm::Module&)
/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm/lib/IR/LegacyPassManager.cpp:1701
    #19 0x6e328f in compileModule
/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm/tools/llc/llc.cpp:381:5
    #20 0x6e328f in main
/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm/tools/llc/llc.cpp:204
    #21 0x7fb2f6f2beac in __libc_start_main
(/lib/x86_64-linux-gnu/libc.so.6+0x1eeac)
    #22 0x6530dc in _start
(/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm_build_msan/bin/llc+0x6530dc)

SUMMARY: MemorySanitizer: use-of-uninitialized-value
/mnt/b/sanitizer-buildbot2/sanitizer-x86_64-linux-bootstrap/build/llvm/lib/Support/raw_ostream.cpp:110:7
in operator<<

I think SelectionDAG::NextPersistentId is actually the one that is not
being initialized, so I initialized it in r253422. We'll see if it greens
the msan bootstrap bot:
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-bootstrap/builds/10128

On Fri, Sep 18, 2015 at 10:41 AM, Matthias Braun via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: matze
> Date: Fri Sep 18 12:41:00 2015
> New Revision: 248010
>
> URL: http://llvm.org/viewvc/llvm-project?rev=248010&view=rev
> Log:
> SelectionDAG: Introduce PersistentID to SDNode for assert builds.
>
> This gives us more human readable numbers to identify nodes in debug
> dumps.
>
> Before:
>   0x7fcbd9700160: ch = EntryToken
>
>   0x7fcbd985c7c8: i64 = Register %RAX
>
>    ...
>
>       0x7fcbd9700160: <multiple use>
>     0x7fcbd985c578: i64,ch = MOV64rm 0x7fcbd985c6a0, 0x7fcbd985cc68,
> 0x7fcbd985c200, 0x7fcbd985cd90, 0x7fcbd985ceb8,
> 0x7fcbd9700160<Mem:LD8[@foo]> [ORD=2]
>
>   0x7fcbd985c8f0: ch,glue = CopyToReg 0x7fcbd9700160, 0x7fcbd985c7c8,
> 0x7fcbd985c578 [ORD=3]
>
>     0x7fcbd985c7c8: <multiple use>
>     0x7fcbd985c8f0: <multiple use>
>     0x7fcbd985c8f0: <multiple use>
>   0x7fcbd985ca18: ch = RETQ 0x7fcbd985c7c8, 0x7fcbd985c8f0,
> 0x7fcbd985c8f0:1 [ORD=3]
>
> Now:
>   t0: ch = EntryToken
>
>   t5: i64 = Register %RAX
>
>     ...
>
>       t0: <multiple use>
>     t3: i64,ch = MOV64rm t10, t12, t11, t13, t14, t0<Mem:LD8[@foo]> [ORD=2]
>
>   t6: ch,glue = CopyToReg t0, t5, t3 [ORD=3]
>
>     t5: <multiple use>
>     t6: <multiple use>
>     t6: <multiple use>
>   t7: ch = RETQ t5, t6, t6:1 [ORD=3]
>
> Differential Revision: http://reviews.llvm.org/D12564
>
> Modified:
>     llvm/trunk/include/llvm/CodeGen/SelectionDAG.h
>     llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h
>     llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
>     llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp
>     llvm/trunk/test/CodeGen/PowerPC/ppc64-icbt-pwr7.ll
>     llvm/trunk/test/DebugInfo/Generic/constant-sdnodes-have-dbg-location.ll
>
> llvm/trunk/test/DebugInfo/Generic/constantfp-sdnodes-have-dbg-location.ll
>
> Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAG.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAG.h?rev=248010&r1=248009&r2=248010&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/SelectionDAG.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/SelectionDAG.h Fri Sep 18 12:41:00 2015
> @@ -215,6 +215,10 @@ class SelectionDAG {
>    /// Tracks dbg_value information through SDISel.
>    SDDbgInfo *DbgInfo;
>
> +#ifndef NDEBUG
> +  uint16_t NextPersistentId;
> +#endif
> +
>  public:
>    /// Clients of various APIs that cause global effects on
>    /// the DAG can optionally implement this interface.  This allows the
> clients
>
> Modified: llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h?rev=248010&r1=248009&r2=248010&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/SelectionDAGNodes.h Fri Sep 18
> 12:41:00 2015
> @@ -431,6 +431,12 @@ private:
>    friend struct ilist_traits<SDNode>;
>
>  public:
> +#ifndef NDEBUG
> +  /// Unique and persistent id per SDNode in the DAG.
> +  /// Used for debug printing.
> +  uint16_t PersistentId;
> +#endif
> +
>
>  //===--------------------------------------------------------------------===//
>    //  Accessors
>    //
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp?rev=248010&r1=248009&r2=248010&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Fri Sep 18
> 12:41:00 2015
> @@ -763,6 +763,7 @@ static void VerifySDNode(SDNode *N) {
>  void SelectionDAG::InsertNode(SDNode *N) {
>    AllNodes.push_back(N);
>  #ifndef NDEBUG
> +  N->PersistentId = NextPersistentId++;
>    VerifySDNode(N);
>  #endif
>  }
> @@ -948,6 +949,9 @@ void SelectionDAG::allnodes_clear() {
>    AllNodes.remove(AllNodes.begin());
>    while (!AllNodes.empty())
>      DeallocateNode(AllNodes.begin());
> +#ifndef NDEBUG
> +  NextPersistentId = 0;
> +#endif
>  }
>
>  BinarySDNode *SelectionDAG::GetBinarySDNode(unsigned Opcode, SDLoc DL,
>
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp?rev=248010&r1=248009&r2=248010&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp Fri Sep 18
> 12:41:00 2015
> @@ -361,6 +361,27 @@ const char *SDNode::getIndexedModeName(I
>    }
>  }
>
> +namespace {
> +class PrintNodeId {
> +  const SDNode &Node;
> +public:
> +  explicit PrintNodeId(const SDNode &Node)
> +      : Node(Node) {}
> +  void print(raw_ostream &OS) const {
> +#ifndef NDEBUG
> +    OS << 't' << Node.PersistentId;
> +#else
> +    OS << (const void*)&Node;
> +#endif
> +  }
> +};
> +
> +static inline raw_ostream &operator<<(raw_ostream &OS, const PrintNodeId
> &P) {
> +  P.print(OS);
> +  return OS;
> +}
> +}
> +
>  void SDNode::dump() const { dump(nullptr); }
>  void SDNode::dump(const SelectionDAG *G) const {
>    print(dbgs(), G);
> @@ -368,7 +389,7 @@ void SDNode::dump(const SelectionDAG *G)
>  }
>
>  void SDNode::print_types(raw_ostream &OS, const SelectionDAG *G) const {
> -  OS << (const void*)this << ": ";
> +  OS << PrintNodeId(*this) << ": ";
>
>    for (unsigned i = 0, e = getNumValues(); i != e; ++i) {
>      if (i) OS << ",";
> @@ -560,7 +581,7 @@ static void DumpNodes(const SDNode *N, u
>        DumpNodes(Op.getNode(), indent+2, G);
>      else
>        dbgs() << "\n" << std::string(indent+2, ' ')
> -             << (void*)Op.getNode() << ": <multiple use>";
> +             << PrintNodeId(*Op.getNode()) << ": <multiple use>";
>
>    dbgs() << '\n';
>    dbgs().indent(indent);
> @@ -676,8 +697,9 @@ void SDNode::print(raw_ostream &OS, cons
>    print_types(OS, G);
>    for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
>      if (i) OS << ", "; else OS << " ";
> -    OS << (void*)getOperand(i).getNode();
> -    if (unsigned RN = getOperand(i).getResNo())
> +    const SDValue Operand = getOperand(i);
> +    OS << PrintNodeId(*Operand.getNode());
> +    if (unsigned RN = Operand.getResNo())
>        OS << ":" << RN;
>    }
>    print_details(OS, G);
>
> Modified: llvm/trunk/test/CodeGen/PowerPC/ppc64-icbt-pwr7.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/ppc64-icbt-pwr7.ll?rev=248010&r1=248009&r2=248010&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/CodeGen/PowerPC/ppc64-icbt-pwr7.ll (original)
> +++ llvm/trunk/test/CodeGen/PowerPC/ppc64-icbt-pwr7.ll Fri Sep 18 12:41:00
> 2015
> @@ -10,10 +10,10 @@ entry:
>    ret void
>
>  ; FIXME: Crashing is not really the correct behavior here, we really
> should just emit nothing
> -; CHECK: Cannot select: 0x{{[0-9,a-f]+}}: ch = Prefetch
> -; CHECK: 0x{{[0-9,a-f]+}}: i32 = Constant<0>
> -; CHECK-NEXT: 0x{{[0-9,a-f]+}}: i32 = Constant<3>
> -; CHECK-NEXT: 0x{{[0-9,a-f]+}}: i32 = Constant<0>
> +; CHECK: Cannot select: {{0x[0-9,a-f]+|t[0-9]+}}: ch = Prefetch
> +; CHECK: {{0x[0-9,a-f]+|t[0-9]+}}: i32 = Constant<0>
> +; CHECK-NEXT: {{0x[0-9,a-f]+|t[0-9]+}}: i32 = Constant<3>
> +; CHECK-NEXT: {{0x[0-9,a-f]+|t[0-9]+}}: i32 = Constant<0>
>
>  }
>
>
> Modified:
> llvm/trunk/test/DebugInfo/Generic/constant-sdnodes-have-dbg-location.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Generic/constant-sdnodes-have-dbg-location.ll?rev=248010&r1=248009&r2=248010&view=diff
>
> ==============================================================================
> ---
> llvm/trunk/test/DebugInfo/Generic/constant-sdnodes-have-dbg-location.ll
> (original)
> +++
> llvm/trunk/test/DebugInfo/Generic/constant-sdnodes-have-dbg-location.ll Fri
> Sep 18 12:41:00 2015
> @@ -1,7 +1,7 @@
>  ; RUN: llc -debug < %s 2>&1 | FileCheck %s
>  ; REQUIRES: asserts
>
> -; CHECK: 0x{{[0-9,a-f]+}}: i32 = Constant<-1>test.c:4:5
> +; CHECK: t{{[0-9]+}}: i32 = Constant<-1>test.c:4:5
>
>  define i32 @main() {
>  entry:
>
> Modified:
> llvm/trunk/test/DebugInfo/Generic/constantfp-sdnodes-have-dbg-location.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/Generic/constantfp-sdnodes-have-dbg-location.ll?rev=248010&r1=248009&r2=248010&view=diff
>
> ==============================================================================
> ---
> llvm/trunk/test/DebugInfo/Generic/constantfp-sdnodes-have-dbg-location.ll
> (original)
> +++
> llvm/trunk/test/DebugInfo/Generic/constantfp-sdnodes-have-dbg-location.ll
> Fri Sep 18 12:41:00 2015
> @@ -1,7 +1,7 @@
>  ; RUN: llc -debug < %s 2>&1 | FileCheck %s
>  ; REQUIRES: asserts
>
> -; CHECK: 0x{{[0-9,a-f]+}}: f64 = ConstantFP<1.500000e+00>test.c:3:5
> +; CHECK: t{{[0-9]+}}: f64 = ConstantFP<1.500000e+00>test.c:3:5
>
>  define double @f() {
>  entry:
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151117/05179803/attachment.html>


More information about the llvm-commits mailing list