<div dir="ltr">Iteration order isn't always related to output - do these specific containers iteration orders cause nondeterminism, or is this an attempt to fix things pre-emptively? (the latter might be overly aggressive - we may not want to use deterministic ordered containers 'just in case', but only when we know the iteration order is important)<br><br><div class="gmail_quote"><div dir="ltr">On Fri, Oct 21, 2016 at 6:48 PM Mandeep Singh Grang via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">mgrang created this revision.<br class="gmail_msg">
mgrang added reviewers: t.p.northover, chandlerc, hfinkel.<br class="gmail_msg">
mgrang added a subscriber: llvm-commits.<br class="gmail_msg">
mgrang set the repository for this revision to rL LLVM.<br class="gmail_msg">
Herald added subscribers: qcolombet, MatzeB.<br class="gmail_msg">
<br class="gmail_msg">
Iteration of SmallPtrSet's are a cause of non-determinism in codegen because<br class="gmail_msg">
the iteration order is not fixed. This results in different codegen from<br class="gmail_msg">
run-to-run, release vs release+asserts and on linux vs windows.<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
The fix is to use SmallSetVector where the iteration order is deterministic.<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
Repository:<br class="gmail_msg">
  rL LLVM<br class="gmail_msg">
<br class="gmail_msg">
<a href="https://reviews.llvm.org/D25891" rel="noreferrer" class="gmail_msg" target="_blank">https://reviews.llvm.org/D25891</a><br class="gmail_msg">
<br class="gmail_msg">
Files:<br class="gmail_msg">
  include/llvm/CodeGen/LiveRangeEdit.h<br class="gmail_msg">
  lib/CodeGen/CodeGenPrepare.cpp<br class="gmail_msg">
  lib/CodeGen/InlineSpiller.cpp<br class="gmail_msg">
  lib/CodeGen/MachineBlockPlacement.cpp<br class="gmail_msg">
  lib/CodeGen/MachinePipeliner.cpp<br class="gmail_msg">
  lib/CodeGen/MachineVerifier.cpp<br class="gmail_msg">
  lib/CodeGen/OptimizePHIs.cpp<br class="gmail_msg">
  lib/CodeGen/PHIElimination.cpp<br class="gmail_msg">
  lib/CodeGen/PrologEpilogInserter.cpp<br class="gmail_msg">
  lib/CodeGen/RegAllocBase.h<br class="gmail_msg">
  lib/CodeGen/RegAllocGreedy.cpp<br class="gmail_msg">
  lib/CodeGen/RegAllocPBQP.cpp<br class="gmail_msg">
  lib/CodeGen/SelectionDAG/SelectionDAG.cpp<br class="gmail_msg">
  lib/CodeGen/SjLjEHPrepare.cpp<br class="gmail_msg">
  lib/CodeGen/SplitKit.cpp<br class="gmail_msg">
<br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
llvm-commits mailing list<br class="gmail_msg">
<a href="mailto:llvm-commits@lists.llvm.org" class="gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a><br class="gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br class="gmail_msg">
</blockquote></div></div>