Remove llvm file
This commit is contained in:
parent
06a25de61d
commit
0aebe4a7b1
1 changed files with 0 additions and 185 deletions
185
test_map2.ll
185
test_map2.ll
|
|
@ -1,185 +0,0 @@
|
|||
target triple = "x86_64-pc-linux-gnu"
|
||||
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
|
||||
@.str = private unnamed_addr constant [3 x i8] c"%i
|
||||
", align 1
|
||||
@.non_exhaustive_patterns = private unnamed_addr constant [41 x i8] c"Non-exhaustive patterns in case at %i:%i
|
||||
"
|
||||
declare i32 @printf(ptr noalias nocapture, ...)
|
||||
declare i32 @exit(i32 noundef)
|
||||
declare ptr @malloc(i32 noundef)
|
||||
%List = type { i8, [23 x i8] }
|
||||
%Cons = type { i8, i64, %List* }
|
||||
%Nil = type { i8 }
|
||||
; NYTT: kontexttyp
|
||||
%Closure_sc_0 = type { i64 (i64)*, i64 }
|
||||
|
||||
; Ident "sum$List_Int": (ECase (EVar (Ident "$4xs"),TLit (Ident "List")) [Branch (PEnum (Ident "Nil"),TLit (Ident "List")) (ELit (LInt 0),TLit (Ident "Int")),Branch (PInj (Ident "Cons") [PVar (Ident "$5x",TLit (Ident "Int")),PVar (Ident "$6xs",TLit (Ident "List"))],TLit (Ident "List")) (EAdd (EVar (Ident "$5x"),TLit (Ident "Int")) (EApp (EVar (Ident "sum$List_Int"),TFun (TLit (Ident "List")) (TLit (Ident "Int"))) (EVar (Ident "$6xs"),TLit (Ident "List")),TLit (Ident "Int")),TLit (Ident "Int"))],TLit (Ident "Int"))
|
||||
define fastcc i64 @sum$List_Int(%List %$4xs) {
|
||||
%1 = alloca i64
|
||||
; Penum
|
||||
%2 = extractvalue %List %$4xs, 0
|
||||
%3 = icmp eq i8 %2, 1
|
||||
br i1 %3, label %lbl_success_3, label %lbl_failed_2
|
||||
|
||||
lbl_success_3:
|
||||
%4 = alloca %List
|
||||
store %List %$4xs, ptr %4
|
||||
%5 = load %Nil, ptr %4
|
||||
store i64 0, ptr %1
|
||||
br label %lbl_escape_1
|
||||
|
||||
lbl_failed_2:
|
||||
; Inj
|
||||
%6 = extractvalue %List %$4xs, 0
|
||||
%7 = icmp eq i8 %6, 0
|
||||
br i1 %7, label %lbl_success_5, label %lbl_failed_4
|
||||
|
||||
lbl_success_5:
|
||||
%8 = alloca %List
|
||||
store %List %$4xs, ptr %8
|
||||
%9 = load %Cons, ptr %8
|
||||
; ident i64
|
||||
%$5x = extractvalue %Cons %9, 1
|
||||
; ident %List
|
||||
%10 = extractvalue %Cons %9, 2
|
||||
%$6xs = load %List, ptr %10
|
||||
; TLit (Ident "Int")
|
||||
%11 = call fastcc i64 @sum$List_Int(%List %$6xs)
|
||||
%12 = add i64 %$5x, %11
|
||||
store i64 %12, ptr %1
|
||||
br label %lbl_escape_1
|
||||
|
||||
lbl_failed_4:
|
||||
call i32 (ptr, ...) @printf(ptr noundef @.non_exhaustive_patterns, i64 noundef 12, i64 noundef 6)
|
||||
call i32 @exit(i32 noundef 1)
|
||||
br label %lbl_escape_1
|
||||
|
||||
lbl_escape_1:
|
||||
%15 = load i64, ptr %1
|
||||
ret i64 %15
|
||||
}
|
||||
|
||||
; Ident "sc_0$Int_Int": (EAdd (EVar (Ident "$7x"),TLit (Ident "Int")) (ELit (LInt 10),TLit (Ident "Int")),TLit (Ident "Int"))
|
||||
; ÄNDRAT: lägg till kontextpekare
|
||||
define fastcc i64 @sc_0$Int_Int(ptr %closure_sc_0, i64 %$7x) {
|
||||
; NYTT: Ladda alla fria variabler
|
||||
%fri_variabel_ptr = getelementptr inbounds %Closure_sc_0, ptr %closure_sc_0, i32 0, i32 1
|
||||
%fri_variabel = load i64, ptr %fri_variabel_ptr
|
||||
; ÄNDRAT: %fri_variabel istället för 2
|
||||
%1 = add i64 %$7x, %fri_variabel
|
||||
ret i64 %1
|
||||
}
|
||||
|
||||
; Ident "map$Int_Int_List_List": (ECase (EVar (Ident "$1xs"),TLit (Ident "List")) [Branch (PEnum (Ident "Nil"),TLit (Ident "List")) (EVar (Ident "Nil"),TLit (Ident "List")),Branch (PInj (Ident "Cons") [PVar (Ident "$2x",TLit (Ident "Int")),PVar (Ident "$3xs",TLit (Ident "List"))],TLit (Ident "List")) (EApp (EApp (EVar (Ident "Cons"),TFun (TLit (Ident "Int")) (TFun (TLit (Ident "List")) (TLit (Ident "List")))) (EApp (EVar (Ident "$0f"),TFun (TLit (Ident "Int")) (TLit (Ident "Int"))) (EVar (Ident "$2x"),TLit (Ident "Int")),TLit (Ident "Int")),TFun (TLit (Ident "List")) (TLit (Ident "List"))) (EApp (EApp (EVar (Ident "map$Int_Int_List_List"),TFun (TFun (TLit (Ident "Int")) (TLit (Ident "Int"))) (TFun (TLit (Ident "List")) (TLit (Ident "List")))) (EVar (Ident "$0f"),TFun (TLit (Ident "Int")) (TLit (Ident "Int"))),TFun (TLit (Ident "List")) (TLit (Ident "List"))) (EVar (Ident "$3xs"),TLit (Ident "List")),TLit (Ident "List")),TLit (Ident "List"))],TLit (Ident "List"))
|
||||
; ÄNDRAT: ptr istället för i64 (i64)*
|
||||
define fastcc %List @map$Int_Int_List_List(ptr %$0f, %List %$1xs) {
|
||||
; NYTT: ta fram funktionspekaren
|
||||
%$0f_deref = load i64(i64)*, ptr %$0f
|
||||
|
||||
%1 = alloca %List
|
||||
; Penum
|
||||
%2 = extractvalue %List %$1xs, 0
|
||||
%3 = icmp eq i8 %2, 1
|
||||
br i1 %3, label %lbl_success_8, label %lbl_failed_7
|
||||
|
||||
lbl_success_8:
|
||||
%4 = alloca %List
|
||||
store %List %$1xs, ptr %4
|
||||
%5 = load %Nil, ptr %4
|
||||
%6 = call fastcc %List @Nil()
|
||||
store %List %6, ptr %1
|
||||
br label %lbl_escape_6
|
||||
|
||||
lbl_failed_7:
|
||||
; Inj
|
||||
%7 = extractvalue %List %$1xs, 0
|
||||
%8 = icmp eq i8 %7, 0
|
||||
br i1 %8, label %lbl_success_10, label %lbl_failed_9
|
||||
|
||||
lbl_success_10:
|
||||
%9 = alloca %List
|
||||
store %List %$1xs, ptr %9
|
||||
%10 = load %Cons, ptr %9
|
||||
; ident i64
|
||||
%$2x = extractvalue %Cons %10, 1
|
||||
; ident %List
|
||||
%11 = extractvalue %Cons %10, 2
|
||||
%$3xs = load %List, ptr %11
|
||||
; TLit (Ident "Int")
|
||||
; ÄNDRAT använd deref
|
||||
%12 = call fastcc i64 %$0f_deref(ptr %$0f, i64 %$2x)
|
||||
; TLit (Ident "List")
|
||||
; ÄNDRAT ptr istället för 64 (64)* och skicka med ptr
|
||||
%13 = call fastcc %List @map$Int_Int_List_List(ptr %$0f, %List %$3xs)
|
||||
; TLit (Ident "List")
|
||||
%14 = call fastcc %List @Cons(i64 %12, %List %13)
|
||||
store %List %14, ptr %1
|
||||
br label %lbl_escape_6
|
||||
|
||||
lbl_failed_9:
|
||||
call i32 (ptr, ...) @printf(ptr noundef @.non_exhaustive_patterns, i64 noundef 14, i64 noundef 6)
|
||||
call i32 @exit(i32 noundef 1)
|
||||
br label %lbl_escape_6
|
||||
|
||||
lbl_escape_6:
|
||||
%17 = load %List, ptr %1
|
||||
ret %List %17
|
||||
}
|
||||
|
||||
|
||||
; Ident "main": (EApp (EVar (Ident "sum$List_Int"),TFun (TLit (Ident "List")) (TLit (Ident "Int"))) (EApp (EApp (EVar (Ident "map$Int_Int_List_List"),TFun (TFun (TLit (Ident "Int")) (TLit (Ident "Int"))) (TFun (TLit (Ident "List")) (TLit (Ident "List")))) (EVar (Ident "sc_0$Int_Int"),TFun (TLit (Ident "Int")) (TLit (Ident "Int"))),TFun (TLit (Ident "List")) (TLit (Ident "List"))) (EApp (EApp (EVar (Ident "Cons"),TFun (TLit (Ident "Int")) (TFun (TLit (Ident "List")) (TLit (Ident "List")))) (ELit (LInt 1),TLit (Ident "Int")),TFun (TLit (Ident "List")) (TLit (Ident "List"))) (EApp (EApp (EVar (Ident "Cons"),TFun (TLit (Ident "Int")) (TFun (TLit (Ident "List")) (TLit (Ident "List")))) (ELit (LInt 2),TLit (Ident "Int")),TFun (TLit (Ident "List")) (TLit (Ident "List"))) (EVar (Ident "Nil"),TLit (Ident "List")),TLit (Ident "List")),TLit (Ident "List")),TLit (Ident "List")),TLit (Ident "Int"))
|
||||
define fastcc i64 @main() {
|
||||
%1 = call fastcc %List @Nil()
|
||||
; TLit (Ident "List")
|
||||
%2 = call fastcc %List @Cons(i64 2, %List %1)
|
||||
; TLit (Ident "List")
|
||||
%3 = call fastcc %List @Cons(i64 1, %List %2)
|
||||
; TLit (Ident "List")
|
||||
|
||||
; NYTT: spara funktionspekaren och 100 i kontexten
|
||||
%closure_sc_0 = alloca %Closure_sc_0
|
||||
store i64(i64)* @sc_0$Int_Int, ptr %closure_sc_0
|
||||
%fri_variabel_ptr = getelementptr inbounds %Closure_sc_0, ptr %closure_sc_0, i32 0, i32 1
|
||||
store i64 100, ptr %fri_variabel_ptr
|
||||
|
||||
|
||||
; store %Closure_sc_0 {i64 (i64)* @sc_0$Int_Int, 100}, ptr %closure_sc_0
|
||||
|
||||
; ÄNDRAT ptr %closure_sc_0 istället för i64 (i64)* @sc_0$Int_Int
|
||||
%4 = call fastcc %List @map$Int_Int_List_List(ptr %closure_sc_0, %List %3)
|
||||
; TLit (Ident "Int")
|
||||
%5 = call fastcc i64 @sum$List_Int(%List %4)
|
||||
call i32 (ptr, ...) @printf(ptr noundef @.str, i64 noundef %5)
|
||||
ret i64 0
|
||||
}
|
||||
|
||||
define fastcc %List @Cons(i64 %arg_0, %List %arg_1) {
|
||||
%1 = alloca %List
|
||||
%2 = getelementptr %List, %List* %1, i64 0, i32 0
|
||||
store i8 0, i8* %2
|
||||
%3 = bitcast %List* %1 to %Cons*
|
||||
; i64 arg_0 1
|
||||
%4 = getelementptr %Cons, %Cons* %3, i64 0, i32 1
|
||||
; Just store
|
||||
store i64 %arg_0, ptr %4
|
||||
; %List arg_1 2
|
||||
%5 = getelementptr %Cons, %Cons* %3, i64 0, i32 2
|
||||
; Malloc and store
|
||||
%6 = call ptr @malloc(i64 24)
|
||||
store %List %arg_1, ptr %6
|
||||
store %List* %6, ptr %5
|
||||
; Return the newly constructed value
|
||||
%7 = load %List, ptr %1
|
||||
ret %List %7
|
||||
}
|
||||
|
||||
define fastcc %List @Nil() {
|
||||
%1 = alloca %List
|
||||
%2 = getelementptr %List, %List* %1, i64 0, i32 0
|
||||
store i8 1, i8* %2
|
||||
%3 = bitcast %List* %1 to %Nil*
|
||||
; Return the newly constructed value
|
||||
%4 = load %List, ptr %1
|
||||
ret %List %4
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue