Intermediate Representation
int main()
{
    int a;
    int b;
    int c;
 
    a = 5;
 
    if(a == 1)
        b = 6;
    else
        b = 8;
 
    c = b;
 
    return 0;
}

Пример промежуточного представления после фазы MIR Lower

==== BasicBlock 1 Pred() Succ(2) next 2
$L1: (refs=0)
   {-4}, {-7}        = START _main
==== BasicBlock 2 Pred(1) Succ(4,3) prev 1 next 3
_main: (refs=1)
                       ENTERFUNC
   _a                = ASSIGN 5
   t272              = CMP(EQ) _a, 1
                       CBRANCH(EQ) t272, $L7, $L6
==== BasicBlock 3 Pred(2) Succ(5) prev 2 next 4
$L7: (refs=1)
   _b                = ASSIGN 6
                       GOTO $L8
==== BasicBlock 4 Pred(2) Succ(5) prev 3 next 5
$L6: (refs=1)
   _b                = ASSIGN 8
                       GOTO $L8
==== BasicBlock 5 Pred(4,3) Succ(7) prev 4 next 6
$L8: (refs=2)
   _c                = ASSIGN _b
                       RET 0, $L3
==== BasicBlock 6 Pred() Succ() prev 5 next 7
$L5: (refs=0)
                       UNWIND
==== BasicBlock 7 Pred(5) Succ(8) prev 6 next 8
$L3: (refs=1)
                       EXITFUNC
==== BasicBlock 8 Pred(7) Succ() prev 7
$L2: (refs=0)
                       END {-4}

Пример промежуточного представления после фазы Ssa Info Construction

==== BasicBlock 1 Pred() Succ(2) next 2
$L1: (refs=0)
   {-4}, {-7}, {-6}<1> = START _main
==== BasicBlock 2 Pred(1) Succ(4,3) prev 1 next 3
_main: (refs=1)
                       ENTERFUNC
   _a<2>             = ASSIGN 5
   t272              = CMP(EQ) _a<2>, 1
                       CBRANCH(EQ) t272, $L7, $L6
==== BasicBlock 3 Pred(2) Succ(5) prev 2 next 4
$L7: (refs=1)
   _b<3>             = ASSIGN 6
                       GOTO $L8
==== BasicBlock 4 Pred(2) Succ(5) prev 3 next 5
$L6: (refs=1)
   _b<4>             = ASSIGN 8
                       GOTO $L8
==== BasicBlock 5 Pred(4,3) Succ(8) prev 4 next 6
$L8: (refs=2)
   _b<6>             = PHI _b<4>, _b<3>
   _c<5>             = ASSIGN _b<6>
                       RET 0, $L3
==== BasicBlock 6 Pred() Succ(7) prev 5 next 7
$L5: (refs=0)
                       GOTO {-4}, $L10
==== BasicBlock 7 Pred(6) Succ() prev 6 next 8
$L10: (refs=1)
                       UNWIND
==== BasicBlock 8 Pred(5) Succ(9) prev 7 next 9
$L3: (refs=1)
                       GOTO {-4}, $L11
==== BasicBlock 9 Pred(8) Succ(10) prev 8 next 10
$L11: (refs=1)
                       EXITFUNC
==== BasicBlock 10 Pred(9) Succ() prev 9
$L2: (refs=0)
                       END

Пример промежуточного представления после фазы Flow Optimization

==== BasicBlock 1 Pred() Succ(2) next 2
$L1: (refs=0)
   {-4}, {-7}        = START _main
==== BasicBlock 2 Pred(1) Succ(3) prev 1 next 3
_main: (refs=1)
                       ENTERFUNC
   [ESP], {ESP}      = push EBP
   EBP               = mov ESP
   ESP, EFLAGS       = sub ESP, 12(0x0000000c)
==== BasicBlock 3 Pred(2) Succ(4,5) prev 2 next 4
$L12: (refs=0)
                       ENTERBODY
   _a[EBP]           = mov 5
   tv272-(EFLAGS)    = cmp(NE) _a[EBP], 1
                       jcc(NE) tv272-(EFLAGS), $L6
==== BasicBlock 4 Pred(3) Succ(6) prev 3 next 5
   _b[EBP]           = mov 6
                       jmp $L8
==== BasicBlock 5 Pred(3) Succ(6) prev 4 next 6
$L6: (refs=1)
   _b[EBP]           = mov 8
==== BasicBlock 6 Pred(5,4) Succ(7) prev 5 next 7
$L8: (refs=1)
   tv273-(EAX)       = mov _b[EBP]
   _c[EBP]           = mov tv273-(EAX)
   tv274-(EAX)       = mov 0
==== BasicBlock 7 Pred(6) Succ(9) prev 6 next 8
$L3: (refs=0)
                       EXITBODY
   ESP               = mov EBP
   EBP, {ESP}        = pop [ESP]
   {ESP}             = ret {ESP}, $L13
==== BasicBlock 8 Pred() Succ() prev 7 next 9
$L5: (refs=0)
                       UNWIND
==== BasicBlock 9 Pred(7) Succ(10) prev 8 next 10
$L13: (refs=1)
                       EXITFUNC tv274-(EAX)
==== BasicBlock 10 Pred(9) Succ() prev 9
$L2: (refs=0)
                       END {-4}
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-Share Alike 2.5 License.