[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