[LLVMdev] Moving Private Label Prefixes from MCAsmInfo to MCObjectFileInfo
Daniel Sanders
Daniel.Sanders at imgtec.com
Tue May 26 06:58:12 PDT 2015
> -----Original Message-----
> From: Renato Golin [mailto:renato.golin at linaro.org]
> Sent: 23 May 2015 11:19
> To: Jim Grosbach
> Cc: Daniel Sanders; LLVM Developers Mailing List (llvmdev at cs.uiuc.edu)
> Subject: Re: [LLVMdev] Moving Private Label Prefixes from MCAsmInfo to
> MCObjectFileInfo
>
> On 23 May 2015 at 00:08, Jim Grosbach <grosbach at apple.com> wrote:
> > This is the key question. The LLVM assumption is that these sorts of things
> > are inferable from the triple. Your observation here that the GNU world’s
> > notion of triples and LLVM’s need not be the same is a good one. Having a
> > split and a translation up in clang seems an interesting avenue to explore.
> > I suspect this won’t be the last of this sort of issue you’ll encounter,
> > unfortunately. Smarter LLVM layer triples is very worth exploring.
>
> IIRC, some people were exploring moving all options to
> -march/-mcpu/-mfpu and other -m options (like os, abi, release)
> instead of using triples.
>
> It'll be easier to convince other compiler to support -m options than
> to support a whole new type of triple/tuple.
>
> cheers,
> --renato
The intention isn't to change the kind of triples/tuples in use by toolchains and users. There's a lot of legacy and inertia to overcome if we try that. The intention is to map the ambiguous/insufficient GNU triples onto an internal representation as early as possible and pass that internal representation throughout LLVM and the LLVM-IR files. The end-users can still use GNU triples and compiler options such as -EL/-EB, -m32/-m64, etc. and these will be reflected in the internal LLVM tuple.
As an example, here's a sketch of how I see the creation of MCAsmInfo changing in llvm-mc.cpp. At the moment it's:
MCTargetOptions MCOptions = InitMCTargetOptionsFromFlags(); // MCTargetOptions::ABIName set to the value of -target-abi
TripleName = Triple::normalize(TripleName);
Triple TheTriple(TripleName);
...
std::unique_ptr<MCAsmInfo> MAI(TheTarget->createMCAsmInfo(*MRI, TripleName));
assert(MAI && "Unable to create target asm info!");
and it would become something like:
MCTargetOptions MCOptions = InitMCTargetOptionsFromFlags(); // MCTargetOptions::ABIName no longer exists
TargetTuple TheTuple(GNUTriple(TripleName).getTargetTuple());
...
// We can factor this block into a function
if (... arguments have -EL ...)
TargetTuple.setEndian(Little);
if (...arguments have -mabi=X ...)
TargetTuple.setABI(ABI);
... etc. ...
...
std::unique_ptr<MCAsmInfo> MAI(TheTarget->createMCAsmInfo(*MRI, TheTuple));
assert(MAI && "Unable to create target asm info!");
the user is still able to use GNU triples as they did before.
As another example, here's the creation of MCAsmInfo in IRObjectFile.cpp:
StringRef Triple = M->getTargetTriple(); // Currently a GNU triple.
std::unique_ptr<MCAsmInfo> MAI(T->createMCAsmInfo(*MRI, Triple));
if (!MAI)
return;
...
MCTargetOptions MCOptions; // MCTargetOptions::ABIName is not initialized since there are no arguments to parse.
As another example, here's the creation of MCAsmInfo in IRObjectFile.cpp:
TargetTuple Tuple(M->getTargetTriple()); // Now an LLVM tuple and contains the ABI name.
std::unique_ptr<MCAsmInfo> MAI(T->createMCAsmInfo(*MRI, Tuple));
if (!MAI)
return;
...
MCTargetOptions MCOptions; // MCTargetOptions::ABIName no longer exists.
More information about the llvm-dev
mailing list