blob: da6312458b633e07c1a51bb9db258f7a9b231b49 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
(define-module (backend tacky traverse)
#:use-module (backend ast ir)
#:export (func-ir
stmt-ir
))
(define (func-ir name instrs)
(list 'srout-ir name instrs))
(define (stmt-ir val)
(list 'instrs-ir
(cons 'list (append (cdr val)
`((instr-ir ret-ir ,(car val)))))))
(define (expr-ir op . args)
;; args is an alist--key: last reg, value: instrs
(make-instruction (apply append (map cdr args))
op (map car args)))
(define (const-ir val)
(cons (imm-ir val) '()))
(define (make-instruction instrs op srcs)
(let ((dst (make-temporary)))
(cons dst
(append instrs
`((instr-ir ,op ,@srcs dst))))))
(define make-temporary
(let ((count 100))
(lambda ()
(set! count (1+ count))
(list 'tmp-ir count))))
|