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")
))