[LLVMdev] The Trouble with Triples

Daniel Sanders Daniel.Sanders at imgtec.com
Thu Jul 30 07:03:22 PDT 2015


> -----Original Message-----
> From: Renato Golin [mailto:renato.golin at linaro.org]
> Sent: 30 July 2015 00:11
> To: Eric Christopher
> Cc: Daniel Sanders; LLVM Developers Mailing List (llvmdev at cs.uiuc.edu); Jim
> Grosbach (grosbach at apple.com)
> Subject: Re: The Trouble with Triples
> 
> On 29 July 2015 at 23:47, Eric Christopher <echristo at gmail.com> wrote:
> > This part doesn't seem obvious from the direction the patches are going.
> 
> Until now, most of what he has done was to refactor the Triple class,
> with no functional change, and to create a thin layer around the
> Triple (called Tuple) and pass those instead. This is on par with that
> premise.
> 
> The current patch is the first one to actually have some more
> substantial change, so it's good that you stopped it now, before we
> start breaking everything.

Definitely. It's better to be discussing it now rather than (currently) 30 big patches later when I reach the patches that change the IR.

> Maybe, knowing what it is now, if you could have another quick look at
> the patch, and see if the new light has helped understand the patch
> for what it will be. Maybe it's still not good enough, so then we'll
> have to resort to a new round of design discussions.
> 
> 
> > Definitely don't want this in the middle end at all. That all can be part of
> > the TargetMachine/TargetSubtargetInfo interface.
> 
> Ah, yes! But the TargetMachine (& pals) are created from information
> from the Triple and the other bits that front-ends keep for
> themselves.

TargetMachine and many of the others actually hold a llvm::Triple object as their representation of this information. It was a std::string until recently but most users of the member were re-parsing it with llvm::Triple before using it.

> So, in theory, if the Tuple is universal, creating them with a Tuple
> (instead of a Triple+stuff) will free the front-ends of keeping the
> rest of the info on their own, and TargetMachine/SubTargetInfo/etc
> will be more homogeneous across different tools / front-ends than it
> is today.
> 
> Another strong point is: we're not trying to change any other machine
> description / API. This is just about the user options and defaults,
> that are used to *create* machine descriptions.
> 
> 
> >> The decision to create a new class (Tuple) is because Triple already
> >> has a legacy-heavy meaning, which should not change.
> >
> > Agreed with at least the "because" part.
> 
> There was also the name. Triple is very far from the truth. :)
> 
> But changing the Triple class could cause ripples in the mud that
> would be hard to see at first, and hard to change later, after people
> started relying on it.
> 
> The final goal is that the Triple class would end up as being nothing
> more than a Triple *parser*, with the current legacy logic, setting up
> the Tuple fields and using them to select the rest of the default
> fields.
> 
> 
> > OK. What's the general class design look like then? The text from the
> > original mail was fairly confusing then as I thought he was doing something
> > that you say he isn't doing :)
> 
> Daniel, can you send your current plan for the Tuple class?
> 
> cheers,
> --renato

Sure. I'll need some time to transfer it to email and I'm debugging a regression in the 3.7.0 release at the moment so I'll send another email later.




More information about the llvm-dev mailing list