[llvm-dev] How to set Target/Triple of ExecutionEngine
edA-qa mort-ora-y via llvm-dev
llvm-dev at lists.llvm.org
Thu Apr 19 01:56:20 PDT 2018
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
More information about the llvm-dev
mailing list