[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