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

Matthias Braun via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 17 17:30:59 PST 2015


Oh indeed that needed some initialisation, thanks for looking into this!

- Matthias

> On Nov 17, 2015, at 5:24 PM, Reid Kleckner via llvm-commits <llvm-commits at lists.llvm.org> wrote:
> 
> 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
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list