HIR-C
(prog 0
<null 0 void>
<nullNode 0>
(subpDef 0 void
<subp 0 <PTR <SUBP <> false int>> main>
<null 0 void>
(labeldSt 0 void
(list
<labelDef _lab1>)
(block 0 void
(expStmt 0 int
(call 0 int
<subp 0 <PTR <SUBP <<PTR _u_char> > true int>> scanf>
(list
<const 0 <VECT 5 _u_char> "%d%d">
(addr 0 <PTR int>
<var 0 int x>)
(addr 0 <PTR int>
<var 0 int y>))))
(expStmt 0 int
(assign 0 int
<var 0 int sum>
(add 0 int
<var 0 int x>
<var 0 int y>)))
(expStmt 0 int
(call 0 int
<subp 0 <PTR <SUBP <<PTR _u_char> > true int>> printf>
(list
<const 0 <VECT 24 _u_char> "sum of %d and %d is %d\n">
<var 0 int x>
<var 0 int y>
<var 0 int sum>)))
(return 0 int
<const 0 int 0>)))))
[TRACE:Driver]
HIR-base
(prog 0
<null 0 void>
<nullNode 0>
(subpDef 0 void
<subp 0 <PTR <SUBP <> false int>> main>
<null 0 void>
(labeldSt 0 void
(list
<labelDef _lab1>)
(block 0 void
(expStmt 0 int
(call 0 int
<subp 0 <PTR <SUBP <<PTR _u_char> > true int>> scanf>
(list
(decay 0 <PTR _u_char>
<const 0 <VECT 5 _u_char> "%d%d">)
(addr 0 <PTR int>
<var 0 int x>)
(addr 0 <PTR int>
<var 0 int y>))))
(assign 0 int
<var 0 int sum>
(add 0 int
<var 0 int x>
<var 0 int y>))
(expStmt 0 int
(call 0 int
<subp 0 <PTR <SUBP <<PTR _u_char> > true int>> printf>
(list
(decay 0 <PTR _u_char>
<const 0 <VECT 24 _u_char> "sum of %d and %d is %d\n">)
<var 0 int x>
<var 0 int y>
<var 0 int sum>)))
(return 0 int
<const 0 int 0>)))))
[TRACE:Driver]
HIR before HirToLir conversion
(prog 0
<null 0 void>
<nullNode 0 (flags 3)>
(subpDef 0 void
<subp 0 <PTR <SUBP <> false int>> main>
<null 0 void>
(labeldSt 0 void
(list
<labelDef _lab1>)
(block 0 void
(expStmt 0 int
(call 0 int
<subp 0 <PTR <SUBP <<PTR _u_char> > true int>> scanf>
(list
(decay 0 <PTR _u_char> (flags 3)
<const 0 <VECT 5 _u_char> "%d%d" (flags 3)>)
(addr 0 <PTR int> (flags 3)
<var 0 int x>)
(addr 0 <PTR int> (flags 3)
<var 0 int y>))))
(assign 0 int
<var 0 int sum>
(add 0 int
<var 0 int x>
<var 0 int y>))
(expStmt 0 int
(call 0 int
<subp 0 <PTR <SUBP <<PTR _u_char> > true int>> printf>
(list
(decay 0 <PTR _u_char> (flags 3)
<const 0 <VECT 24 _u_char> "sum of %d and %d is %d\n" (flags 3)>)
<var 0 int x>
<var 0 int y>
<var 0 int sum>)))
(return 0 int
<const 0 int 0 (flags 3)>)))))
[TRACE:Driver]
Make LIR from HIR
string in LConst
string in LConst
[TRACE:Driver]
LIR after conversion
(subpDef 0 void
<subp 0 <PTR <SUBP <> false int>> main>
<null 0 void>
(labeldSt 0 void
(list
<labelDef _lab1>)
(block 0 void
<null 0 void>))
LIR of main
(PROLOGUE "main")
(LABELDEF "_lab1")
(CALL:I32 "scanf" (LISTA:I32 (CONST:I32 ""%d%d"") (LISTA:I32 (FRAME:I32 (VAR:I32 "x")) (LISTA:I32 (FRAME:I32 (VAR:I32 "y"))))))
(SET:I32 (MEM:I32 (FRAME:I32 (VAR:I32 "sum"))) (ADD:I32 (MEM:I32 (FRAME:I32 (VAR:I32 "x"))) (MEM:I32 (FRAME:I32 (VAR:I32 "y")))))
(CALL:I32 "printf" (LISTA:I32 (CONST:I32 ""sum of %d and %d is %d
"") (LISTA:I32 (MEM:I32 (FRAME:I32 (VAR:I32 "x"))) (LISTA:I32 (MEM:I32 (FRAME:I32 (VAR:I32 "y"))) (LISTA:I32 (MEM:I32 (FRAME:I32 (VAR:I32 "sum"))))))))
(RETURN:I32 (CONST:I32 0))
(JUMP (LABEL "_lab2"))
(LABELDEF "_lab2")
(EPILOGUE "main")
)
[TRACE:Driver]
LIR under program root
(prog 0
<null 0 void>
<nullNode 0 (flags 3)>
(subpDef 0 void
<subp 0 <PTR <SUBP <> false int>> main>
<null 0 void>
(labeldSt 0 void
(list
<labelDef _lab1>)
(block 0 void
<null 0 void>))
LIR of main
(PROLOGUE "main")
(LABELDEF "_lab1")
(CALL:I32 "scanf" (LISTA:I32 (CONST:I32 ""%d%d"") (LISTA:I32 (FRAME:I32 (VAR:I32 "x")) (LISTA:I32 (FRAME:I32 (VAR:I32 "y"))))))
(SET:I32 (MEM:I32 (FRAME:I32 (VAR:I32 "sum"))) (ADD:I32 (MEM:I32 (FRAME:I32 (VAR:I32 "x"))) (MEM:I32 (FRAME:I32 (VAR:I32 "y")))))
(CALL:I32 "printf" (LISTA:I32 (CONST:I32 ""sum of %d and %d is %d
"") (LISTA:I32 (MEM:I32 (FRAME:I32 (VAR:I32 "x"))) (LISTA:I32 (MEM:I32 (FRAME:I32 (VAR:I32 "y"))) (LISTA:I32 (MEM:I32 (FRAME:I32 (VAR:I32 "sum"))))))))
(RETURN:I32 (CONST:I32 0))
(JUMP (LABEL "_lab2"))
(LABELDEF "_lab2")
(EPILOGUE "main")
))