87b0dbab2d
This change adds enough functionality to compile hello world from S-expressions in a contrived way. It fails to handle this input realistically in several ways. 1) It assumes the existence of dart:core::print 2) It handles all dart values as C strings 3) It assumes only very static calls can be made with no named arguments 4) If a stack overflow is detected it just traps. 5) I'm not sure how the current dart runtime works but the contrived runtime used here puts a contrived thread object in `gs`. This change adds a basic framework for implementing new instructions that should make it possible to implement new instructions with much smaller changes however. Change-Id: Ic167a29908a875bfc234c4e9bf5f4ac2ff52a3a2 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117222 Commit-Queue: Jake Ehrlich <jakehehrlich@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com>
36 lines
1.0 KiB
Plaintext
36 lines
1.0 KiB
Plaintext
; ModuleID = '../../runtime/llvm_codegen/test/codegen/Inputs/hello.sexp'
|
|
source_filename = "../../runtime/llvm_codegen/test/codegen/Inputs/hello.sexp"
|
|
|
|
@0 = constant [14 x i8] c"Hello, World!\00"
|
|
|
|
define void @"hello.dart::main"() {
|
|
B1:
|
|
%0 = call i8* @llvm.stacksave()
|
|
%1 = ptrtoint i8* %0 to i64
|
|
%2 = load i64, i64 addrspace(256)* inttoptr (i64 72 to i64 addrspace(256)*)
|
|
%3 = icmp ult i64 %1, %2
|
|
br i1 %3, label %4, label %5
|
|
|
|
4: ; preds = %B1
|
|
call void @llvm.trap()
|
|
br label %5
|
|
|
|
5: ; preds = %4, %B1
|
|
call void @"dart:core::print"(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @0, i32 0, i32 0))
|
|
ret void
|
|
}
|
|
|
|
; Function Attrs: nounwind
|
|
declare i8* @llvm.stacksave() #0
|
|
|
|
; Function Attrs: cold noreturn nounwind
|
|
declare void @llvm.trap() #1
|
|
|
|
declare void @"dart:core::print"(i8*)
|
|
|
|
; Function Attrs: nounwind
|
|
declare void @llvm.stackprotector(i8*, i8**) #0
|
|
|
|
attributes #0 = { nounwind }
|
|
attributes #1 = { cold noreturn nounwind }
|