Skip to content

Instantly share code, notes, and snippets.

@rferraz
Created March 6, 2011 23:08
Show Gist options
  • Save rferraz/857841 to your computer and use it in GitHub Desktop.
Save rferraz/857841 to your computer and use it in GitHub Desktop.
; ModuleID = 'test'
@jumper = internal global [256 x i8] zeroinitializer
declare i32 @setjmp(i8*)
declare void @longjmp(i8*, i32) noreturn nounwind
define i64 @b() {
entry:
ret i64 1
}
define i64 @a() {
entry:
%0 = call i64 @b()
ret i64 %0
}
define i64 @somefunction() {
entry:
%0 = getelementptr inbounds [256 x i8]* @jumper, i64 0, i64 0
call void @longjmp(i8* %0, i32 99)
%1 = call i64 @a()
ret i64 %1
}
define i64 @main() {
entry:
%0 = getelementptr inbounds [256 x i8]* @jumper, i64 0, i64 0
%1 = call i32 @setjmp(i8* %0)
%2 = icmp eq i32 %1, 0
br i1 %2, label %if, label %else
if: ; preds = %entry
%3 = call i64 @somefunction()
ret i64 %3
else: ; preds = %entry
%4 = zext i32 %1 to i64
ret i64 %4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment