[PATCH] D55467: [WebAssembly] Optimize Irreducible Control Flow

Heejin Ahn via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 17 16:34:26 PST 2018


aheejin accepted this revision.
aheejin added a comment.
This revision is now accepted and ready to land.

LGTM to me modulo a nit.



================
Comment at: lib/Target/WebAssembly/WebAssemblyFixIrreducibleControlFlow.cpp:222
+  SmallPtrSet<MachineBasicBlock *, 4> Entries;
+  SmallVector<MachineBasicBlock *, 4> SortedEntries;
+  for (auto *Looper : Loopers) {
----------------
kripken wrote:
> aheejin wrote:
> > kripken wrote:
> > > aheejin wrote:
> > > > Do we need two separate containers? If you want a vector with a O(1) search, maybe you can use `SetVector` and merge these two?
> > > Hmm, can I sort a SetVector, though? It says the order of iteration is the order of insertion (which is fixed).
> > If the insertion / iteration order is fixed, do we need sorting at all?
> Yeah, good point - I was using an unsorted set earlier on (for LoopBlocks), but if I replace it with a SetVector too then everything indeed ends up deterministic.
> 
> I do have some vague worry about using SetVectors everywhere adding some overhead, but probably I'm overthinking it?
Yeah maybe we are unnecessarily using too many `SetVector`s... how about using not `SetVector` but other set such as `SmallPtrSet` or something for all other usages and revive `SortedEntires`, and sort them once and for all based on the MBB number, as you did before? But maybe not `unordered_set`, because [[ http://llvm.org/docs/ProgrammersManual.html#other-set-like-container-options | its use is discouraged ]] because it is expensive. Sorry for going back and forth :(


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55467/new/

https://reviews.llvm.org/D55467





More information about the llvm-commits mailing list