Skip to content

Instantly share code, notes, and snippets.

@andrewrk
Created October 27, 2016 05:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andrewrk/306522a196c67cb2d5a5a11ffa6b5edb to your computer and use it in GitHub Desktop.
Save andrewrk/306522a196c67cb2d5a5a11ffa6b5edb to your computer and use it in GitHub Desktop.
Zig IR progress: IR analysis can inline loops
extern fn something();
fn doSomethingTenTimes() {
{var i: i32 = 0; while (i < 10; i += 1) {
something();
}}
}
fn doSomethingTenTimes {
Entry_0:
#1 | type | 1 | i32
#2 | (integer literal)| 1 | 0
#3 | void | - | var i: i32 = 0
#8 | (unknown) | - | goto $WhileCond_4
WhileCond_4:
#16 | (unknown) | 1 | &i
#17 | (unknown) | 1 | *#16
#18 | (integer literal)| 1 | 10
#19 | (unknown) | 1 | #17 < 10
#20 | unreachable | - | if (#19) $WhileBody_5 else $WhileEnd_7
WhileBody_5:
#21 | extern fn() | 1 | something
#22 | (unknown) | - | something()
#23 | void | 0 | {}
#24 | (unknown) | - | goto $WhileContinue_6
WhileContinue_6:
#9 | (unknown) | 2 | &i
#10 | (unknown) | 1 | *#9
#11 | (integer literal)| 1 | 1
#12 | (unknown) | 1 | #10 + 1
#13 | void | - | *#9 = #12
#14 | void | 0 | {}
#15 | (unknown) | - | goto $WhileCond_4
WhileEnd_7:
#25 | void | 1 | {}
#26 | unreachable | - | return {}
}
fn doSomethingTenTimes { // (analyzed)
Entry_0:
#3 | void | - | var i: i32 = 0
#6 | (unknown) | - | something()
#9 | (unknown) | - | something()
#12 | (unknown) | - | something()
#15 | (unknown) | - | something()
#18 | (unknown) | - | something()
#21 | (unknown) | - | something()
#24 | (unknown) | - | something()
#27 | (unknown) | - | something()
#30 | (unknown) | - | something()
#33 | (unknown) | - | something()
#36 | unreachable | - | return {}
}
define internal fastcc void @_doSomethingTenTimes() #3 !dbg !4 {
Entry:
call void @something(), !dbg !9
call void @something(), !dbg !9
call void @something(), !dbg !9
call void @something(), !dbg !9
call void @something(), !dbg !9
call void @something(), !dbg !9
call void @something(), !dbg !9
call void @something(), !dbg !9
call void @something(), !dbg !9
call void @something(), !dbg !9
ret void, !dbg !13
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment