mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-10-17 08:17:26 +02:00
Committing LLVM binding for D as it currently exists in the SVN repository.
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
// simple hello world sample of D LLVM
|
||||
module llvmsample1;
|
||||
|
||||
import llvm.llvm;
|
||||
|
||||
void main()
|
||||
{
|
||||
// create module
|
||||
auto m = new Module("sample1");
|
||||
scope(exit) m.dispose();
|
||||
|
||||
// declare string
|
||||
auto chello = ConstantArray.GetString("Hello World!\n", true);
|
||||
auto hello = m.addGlobal(chello.type, "hellostring");
|
||||
hello.initializer = chello;
|
||||
hello.linkage = Linkage.Internal;
|
||||
hello.globalConstant = true;
|
||||
|
||||
// declare printf
|
||||
auto printfType = FunctionType.Get(Type.Int32, [ PointerType.Get(Type.Int8) ], true);
|
||||
auto llprintf = m.addFunction(printfType, "printf");
|
||||
|
||||
// declare main
|
||||
auto mainType = FunctionType.Get(Type.Int32, null);
|
||||
auto llmain = m.addFunction(mainType, "main");
|
||||
|
||||
// create builder
|
||||
auto b = new Builder;
|
||||
scope(exit) b.dispose();
|
||||
|
||||
// create main body block
|
||||
auto bb = llmain.appendBasicBlock("entry");
|
||||
b.positionAtEnd(bb);
|
||||
|
||||
// call printf
|
||||
auto zero = ConstantInt.GetU(Type.Int32, 0);
|
||||
auto helloptr = b.buildGEP(hello, [ zero, zero ], "str");
|
||||
helloptr.dump();
|
||||
auto args = [ helloptr ];
|
||||
auto call = b.buildCall(llprintf, args, "");
|
||||
|
||||
// return 0
|
||||
b.buildRet(ConstantInt.GetS(Type.Int32, 0));
|
||||
|
||||
// write bitcode
|
||||
m.writeBitcodeToFile("sample1.bc");
|
||||
}
|
||||
Reference in New Issue
Block a user