[PATCH 0/5] LiveInterval refactoring

Benjamin Kramer benny.kra at gmail.com
Tue Sep 3 11:52:53 PDT 2013


On 03.09.2013, at 20:46, Matthias Braun <mbraun at apple.com> wrote:

> Currently I see these options:
> 
> 1:
> live with a freestanding struct LiveInterval;
> 
> 2:
> class LiveIntervalBase {
>  public: struct Segment {};
> };
> template <> struct isPodLike<LiveIntervalBase::Segment> /* … */
> class LiveInterval : public LiveIntervalBase {
> public:
>    SmallVector<Segment> /* … */
> };
> 
> 3:
> /** please do not use directly but LiveInterval::Segment */
> struct LiveSegment { /* … */ }
> template <> struct isPodLike<LiveSegment> /* … */
> class LiveInterval {
> public:
>   typedef LiveSegment Segment;
>   SmallVector<Segment> /* … */
> };
> 
> 4: Drop the isPodLike, no idea if/how badly it affects performance

When compiling with Clang we use the is_trivially_copyable type trait as a base line for isPodLike. That should be sufficient for the Segment class. Not sure if we care enough about performance on other compilers.

- Ben

> 
> Greetings
> 	Matthias
> 
> On Sep 3, 2013, at 11:39 AM, Jakob Stoklund Olesen <stoklund at 2pi.dk> wrote:
> 
>> 
>> On Sep 3, 2013, at 11:30 AM, Matthias Braun <mbraun at apple.com> wrote:
>> 
>>> Sounds good. Though I’m having trouble make Segment an inner class of LiveInterval:
>>> I need to specialize the isPodLike type constraint class. But apparently c++ forces you to specialize templates at the same scope where the template was specified, so it is only possible
>>> to do that after the LiveIntervall class, where it is too late, because the SmallVector<Segment> has already been instantiated.
>>> So I guess I have to create a LiveSegment class outside LiveInterval, unless I’m missing some C++ tricks here…
>> 
>> Oh, for crying out loud! Maybe some of our C++ wizards can help?
>> 
>> I wonder, though, if isPodLike does any good? Could we just drop it?
>> 
>> Thanks,
>> /jakob
>> 
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits





More information about the llvm-commits mailing list