Skip to content

Instantly share code, notes, and snippets.

@mizchi
Created August 4, 2013 06:30
Show Gist options
  • Save mizchi/6149427 to your computer and use it in GitHub Desktop.
Save mizchi/6149427 to your computer and use it in GitHub Desktop.
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.8.0"
@.endl = private unnamed_addr constant [4 x i8] c"%d\0A\00", align 1
@.fizz = private unnamed_addr constant [8 x i8] c"fizz%d\0A\00", align 1
@.buzz = private unnamed_addr constant [8 x i8] c"buzz%d\0A\00", align 1
@.fizzbuzz = private unnamed_addr constant [12 x i8] c"fizzbuzz%d\0A\00", align 1
define i32 @main() #0 {
entry:
%i = alloca i32, align 4
store i32 1, i32* %i, align 4
br label %for.cond
for.cond:
%0 = load i32* %i, align 4
%cmp = icmp slt i32 %0, 30
br i1 %cmp, label %for.body, label %for.end
for.body:
%1 = load i32* %i, align 4
%is_fizzbuzz = srem i32 %1, 15
%cmp1 = icmp eq i32 %is_fizzbuzz, 0
br i1 %cmp1, label %if.fizzbuzz, label %if.not_fizzbuzz
if.fizzbuzz:
%call1 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([12 x i8]* @.fizzbuzz, i32 0, i32 0), i32 %1)
br label %for.inc
if.not_fizzbuzz:
%2 = load i32* %i, align 4
%is_fizz = srem i32 %2, 3
%cmp2 = icmp eq i32 %is_fizz, 0
br i1 %cmp2, label %if.fizz, label %if.not_fizz
if.fizz:
%call2 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([8 x i8]* @.fizz, i32 0, i32 0), i32 %1)
br label %for.inc
if.not_fizz:
%3 = load i32* %i, align 4
%is_buzz = srem i32 %3, 5
%cmp3 = icmp eq i32 %is_buzz, 0
br i1 %cmp3, label %if.buzz, label %if.not_buzz
if.buzz:
%call3 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([8 x i8]* @.buzz, i32 0, i32 0), i32 %1)
br label %for.inc
if.not_buzz:
%call4 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([4 x i8]* @.endl, i32 0, i32 0), i32 %1)
br label %for.inc
for.inc:
%4 = load i32* %i, align 4
%inc = add nsw i32 %4, 1
store i32 %inc, i32* %i, align 4
br label %for.cond
for.end:
ret i32 0
}
declare i32 @printf(i8*, ...) #1
attributes #0 = { nounwind ssp uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment