mirror of https://github.com/tinygo-org/tinygo.git
Browse Source
This has the benefit of not requiring a 'runtime' IR file, so that complete relocatable files can be built without requiring input IR. This makes the compiler a lot easier to use without the Makefile. Code size is not affected.pull/6/head
Ayke van Laethem
6 years ago
7 changed files with 70 additions and 49 deletions
@ -1,27 +1,3 @@ |
|||
source_filename = "runtime/runtime.ll" |
|||
|
|||
declare void @runtime.initAll() |
|||
declare void @main.main() |
|||
declare i8* @main.main$async(i8*) |
|||
declare void @runtime.scheduler(i8*) |
|||
|
|||
; Will be changed to true if there are 'go' statements in the compiled program. |
|||
@has_scheduler = private unnamed_addr constant i1 false |
|||
|
|||
define i32 @main() { |
|||
call void @runtime.initAll() |
|||
%has_scheduler = load i1, i1* @has_scheduler |
|||
; This branch will be optimized away. Only one of the targets will remain. |
|||
br i1 %has_scheduler, label %with_scheduler, label %without_scheduler |
|||
|
|||
with_scheduler: |
|||
; Initialize main and run the scheduler. |
|||
%main = call i8* @main.main$async(i8* null) |
|||
call void @runtime.scheduler(i8* %main) |
|||
ret i32 0 |
|||
|
|||
without_scheduler: |
|||
; No scheduler is necessary. Call main directly. |
|||
call void @main.main() |
|||
ret i32 0 |
|||
} |
|||
; dummy file |
|||
|
Loading…
Reference in new issue