edA-qa mort-ora-y via llvm-dev
2018-Apr-19 08:44 UTC
[llvm-dev] How to set Target/Triple of ExecutionEngine
I don't know if I'm setting the triple of my execution engine
correctly. This is leading to an issue where a struct `{i8,i64}` is not
getting the same layout as the ABI expects.
I setup my engine/module like this:
llvm::SmallVector<std::string,2> mattrs;
llvm::EngineBuilder builder{ unique_ptr<llvm::Module>(module) };
llvm::ExecutionEngine * ee = builder.
setErrorStr( &errStr ).
setEngineKind( llvm::EngineKind::JIT ).
setTargetOptions( topts ).
create(builder.selectTarget(
llvm::Triple(llvm::Triple::normalize(platform::target->triple)),
"", "",
mattrs ));
module->setDataLayout( ee->getDataLayout() );
Where `module` is my `llvm::Module` with the generated IR code.
I'm using the triple `x86_64-pc-linux-gnu`, the same as clang on the
machine, but getting different alignments. I'm assuming the above is
somehow not creating the correct layout. Perhaps there's an ordering issue?
--
edA-qa mort-ora-y
http://mortoray.com/
Creator of the Leaf language
http://leaflang.org/
Streaming algorithms, AI, and design on Twitch
https://www.twitch.tv/mortoray
Twitter
edaqa
edA-qa mort-ora-y via llvm-dev
2018-Apr-19 08:56 UTC
[llvm-dev] How to set Target/Triple of ExecutionEngine
Taking one step back, I'm not clear I'm even setting the triple/DataLayout on the module correctly: module = new llvm::Module( "test", *llvm_context ); module->setTargetTriple( platform::target->triple ); Is that enough to create an appropriate DataLayout for the module? I don't see anyway to convert a triple to a DataLayout, so I can't call `setDataLayout`. On 19/04/18 10:44, edA-qa mort-ora-y via llvm-dev wrote:> I don't know if I'm setting the triple of my execution engine > correctly. This is leading to an issue where a struct `{i8,i64}` is not > getting the same layout as the ABI expects. > > I setup my engine/module like this: > > llvm::SmallVector<std::string,2> mattrs; > llvm::EngineBuilder builder{ unique_ptr<llvm::Module>(module) }; > llvm::ExecutionEngine * ee = builder. > setErrorStr( &errStr ). > setEngineKind( llvm::EngineKind::JIT ). > setTargetOptions( topts ). > create(builder.selectTarget( > llvm::Triple(llvm::Triple::normalize(platform::target->triple)), "", "", > mattrs )); > > module->setDataLayout( ee->getDataLayout() ); > > Where `module` is my `llvm::Module` with the generated IR code. > > I'm using the triple `x86_64-pc-linux-gnu`, the same as clang on the > machine, but getting different alignments. I'm assuming the above is > somehow not creating the correct layout. Perhaps there's an ordering issue? >-- edA-qa mort-ora-y http://mortoray.com/ Creator of the Leaf language http://leaflang.org/ Streaming algorithms, AI, and design on Twitch https://www.twitch.tv/mortoray Twitter edaqa
Lang Hames via llvm-dev
2018-Apr-19 19:52 UTC
[llvm-dev] How to set Target/Triple of ExecutionEngine
Hi edaqa,
You might need to set your TargetOptions before calling selectTarget. E.g.
builder.setTargetOptions(Opts).selectTarget(...);
Or you could just let EngineBuilder call selectTarget for you (which is
what the no-argument version of EngineBuilder::create does):
llvm::ExecutionEngine * ee = builder.
setErrorStr( &errStr ).
setEngineKind( llvm::EngineKind::JIT ).
setTargetOptions( topts ).
setMArch(arch).
setMAttrs(mattrs).
create();
If those are still failing, it would be interesting to get the data layout
string that you are getting from the ExecutionEngine instance and compare
it to what you are expecting.
Cheers,
Lang.
On Thu, Apr 19, 2018 at 1:56 AM, edA-qa mort-ora-y via llvm-dev <
llvm-dev at lists.llvm.org> wrote:
> Taking one step back, I'm not clear I'm even setting the
> triple/DataLayout on the module correctly:
>
> module = new llvm::Module( "test", *llvm_context );
> module->setTargetTriple( platform::target->triple );
>
> Is that enough to create an appropriate DataLayout for the module? I
> don't see anyway to convert a triple to a DataLayout, so I can't
call
> `setDataLayout`.
>
>
> On 19/04/18 10:44, edA-qa mort-ora-y via llvm-dev wrote:
> > I don't know if I'm setting the triple of my execution engine
> > correctly. This is leading to an issue where a struct `{i8,i64}` is
not
> > getting the same layout as the ABI expects.
> >
> > I setup my engine/module like this:
> >
> > llvm::SmallVector<std::string,2> mattrs;
> > llvm::EngineBuilder builder{
unique_ptr<llvm::Module>(module) };
> > llvm::ExecutionEngine * ee = builder.
> > setErrorStr( &errStr ).
> > setEngineKind( llvm::EngineKind::JIT ).
> > setTargetOptions( topts ).
> > create(builder.selectTarget(
> > llvm::Triple(llvm::Triple::normalize(platform::target->triple)),
"", "",
> > mattrs ));
> >
> > module->setDataLayout( ee->getDataLayout() );
> >
> > Where `module` is my `llvm::Module` with the generated IR code.
> >
> > I'm using the triple `x86_64-pc-linux-gnu`, the same as clang on
the
> > machine, but getting different alignments. I'm assuming the above
is
> > somehow not creating the correct layout. Perhaps there's an
ordering
> issue?
> >
>
> --
> edA-qa mort-ora-y
> http://mortoray.com/
>
> Creator of the Leaf language
> http://leaflang.org/
>
> Streaming algorithms, AI, and design on Twitch
> https://www.twitch.tv/mortoray
>
> Twitter
> edaqa
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20180419/69c9234e/attachment.html>