function main() -> int
{
var a: int = 5;
var b: int;
if (a > 3)
{
b = 1;
}
else
{
b = 0;
}
return b;
}
{
"functions": [
{
"name": "main",
"parameters": [],
"return_type": {
"name": "int"
},
"body": {
"statements": [
{
"name": "a",
"type": {
"name": "int"
},
"initial_value": {
"value": 5
}
},
{
"name": "b",
"type": {
"name": "int"
},
"initial_value": null
},
{
"condition": {
"operator": "GT",
"left": {
"name": "a"
},
"right": {
"value": 3
}
},
"then_block": {
"statements": [
{
"name": "b",
"expression": {
"value": 1
}
}
]
},
"else_block": {
"statements": [
{
"name": "b",
"expression": {
"value": 0
}
}
]
}
},
{
"expression": {
"name": "b"
}
}
]
}
}
]
}
main() -> int
→
→
a: int
b: int
→
←
←
←
procedure main() -> int:
bb1:
a = 5
b = 0
t1 = a > 3
if t1 goto bb2 else goto bb3
bb2:
b = 1
goto bb4
bb3:
b = 0
goto bb4
bb4:
return b
t2 = 0
return t2
procedure main() -> int:
bb1:
a = 5
b = 0
t1 = a > 3
if t1 goto bb2 else goto bb3
bb2:
b = 1
goto bb4
bb3:
b = 0
goto bb4
bb4:
return b
main:
entry: bb1, exit: bb4
block bb1:
flags: entry
predecessors: []
successors: ['bb2', 'bb3']
instructions:
a = 5
b = 0
t1 = a > 3
if t1 goto bb2 else goto bb3
block bb2:
predecessors: ['bb1']
successors: ['bb4']
instructions:
b = 1
goto bb4
block bb3:
predecessors: ['bb1']
successors: ['bb4']
instructions:
b = 0
goto bb4
block bb4:
flags: exit
predecessors: ['bb2', 'bb3']
successors: []
instructions:
return b
proc main() -> int:
block bb1:
a.0 = 5
b.0 = 0
t1 = a.0 > 3
if t1 goto bb2 else goto bb3
block bb2:
b.1 = 1
goto bb4
block bb3:
b.2 = 0
goto bb4
block bb4:
b.4 = φ(bb2: b.1, bb3: b.2)
return b.4
; ModuleID = "module"
target triple = "unknown-unknown-unknown"
target datalayout = ""
define i32 @"main"()
{
bb1:
%"a.0" = add i32 5, 0
%"b.0" = add i32 0, 0
%"t1" = icmp sgt i32 %"a.0", 3
br i1 %"t1", label %"bb2", label %"bb3"
bb2:
%"b.1" = add i32 1, 0
br label %"bb4"
bb3:
%"b.2" = add i32 0, 0
br label %"bb4"
bb4:
%"b.4" = phi i32 [%"b.1", %"bb2"], [%"b.2", %"bb3"]
ret i32 %"b.4"
}
1