[PATCH] [AArch64] FP load balancing pass for Cortex-A57
James Molloy
james at jamesmolloy.co.uk
Fri Aug 8 08:39:46 PDT 2014
Hi David,
Partly this may be to do with my unfamiliarity with the unique_ptr idiom,
and may be using it incorrectly. We're talking about pointers to "class
Chain", which reside in two containers:
std::set<Chain*> AllChains;
std::map<unsigned, Chain*> ActiveChains;
AllChains obviously contains all the chains, and ActiveChains may contain a
subset of AllChains (as values); there may be duplicates too. To make this
work, I'd need to change AllChains to be a
std::set<std::unique_ptr<Chain>>, and would have to use "::get()" to get
the unmanaged version of the pointer before it could be passed into
ActiveChains, as I'm effectively duplicating the pointer. This seems to
hack around the intended semantics (shared_ptr might be better here?).
Secondly the loops become more clunky. From:
for (auto *I : AllChains)
EC.insert(I);
for (auto *I : AllChains) {
for (auto *J : AllChains) {
if (I != J && I->rangeOverlapsWith(J))
EC.unionSets(I, J);
}
}
to:
for (auto &I : AllChains)
EC.insert(I.get());
for (auto &I : AllChains) {
for (auto &J : AllChains) {
if (&*I != &*J && I->rangeOverlapsWith(&*J))
EC.unionSets(&*I, &*J);
}
}
(where I've written &* I could have used .get()).
Am I misusing the idiom? What would you recommend?
Cheers,
James
On 8 August 2014 16:27, David Blaikie <dblaikie at gmail.com> wrote:
> On Fri, Aug 8, 2014 at 5:43 AM, James Molloy <james at jamesmolloy.co.uk>
> wrote:
> > Thanks Tim,
> >
> > Using unique_ptr ended up making the code harder to read, so I simply
> added
> > a deletion loop which I think is cleaner.
>
> I haven't looked at this patch in detail, but is there a reasonable
> summary of why unique_ptr made the code harder to read?
>
> I'm really interested in making/encouraging ownership to be more
> explicit/clear and would sometimes even encourage it when it hurts
> (superficial (which might not be the case here)) readability. It's
> sometimes the case that ownership looks awkward when you make it
> explicit because it's an awkward ownership scheme and making it
> implicit just hinds that complexity (in the not good way of hiding -
> making it a trap/difficult for others to correctly modify the code in
> the future).
>
> - David
>
> >
> > Committed in r215199, thankyou to all reviewers!
> >
> > Cheers,
> >
> > James
> >
> >
> > On 8 August 2014 10:42, Tim Northover <t.p.northover at gmail.com> wrote:
> >>
> >> Just added llvm-commits.
> >>
> >> ================
> >> Comment at: lib/Target/AArch64/AArch64A57FPLoadBalancing.cpp:318
> >> @@ +317,3 @@
> >> + // "link" register between each inst in the chain.
> >> + std::map<unsigned, Chain*> ActiveChains;
> >> + std::set<Chain*> AllChains;
> >> ----------------
> >> Tim Northover wrote:
> >> > Aren't these chains leaked? It *looks* like you could make this (or
> the
> >> > set) a unique_ptr<Chain>.
> >> Also, this should definitely be the set. I hadn't noticed things get
> >> removed from ActiveChains when I wrote this. Should have been obvious,
> in
> >> retrospect.
> >>
> >> http://reviews.llvm.org/D4791
> >>
> >>
> >>
> >> _______________________________________________
> >> llvm-commits mailing list
> >> llvm-commits at cs.uiuc.edu
> >> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> >
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140808/7f3bdfe8/attachment.html>
More information about the llvm-commits
mailing list