Skip to content

Instantly share code, notes, and snippets.

@jvoorhis
Created June 6, 2014 05:46
Show Gist options
  • Save jvoorhis/6a3cb89d91b62ad73bef to your computer and use it in GitHub Desktop.
Save jvoorhis/6a3cb89d91b62ad73bef to your computer and use it in GitHub Desktop.
; ModuleID = 'Kaleidescope'
declare i32 @putchar(i32)
define double @put(double) {
%2 = fptoui double %0 to i32
%3 = call i32 @putchar(i32 %2)
ret double %0
}
define double @"unary!"(double %v) {
entry:
%0 = alloca double
store double %v, double* %0
%v1 = load double* %0
%booltmp = fptoui double %v1 to i1
br i1 %booltmp, label %then, label %else
then: ; preds = %entry
br label %merge
else: ; preds = %entry
br label %merge
merge: ; preds = %else, %then
%iftmp = phi double [ 0.000000e+00, %then ], [ 1.000000e+00, %else ]
ret double %iftmp
}
define double @unary-(double %v) {
entry:
%0 = alloca double
store double %v, double* %0
%v1 = load double* %0
%subtmp = fsub double 0.000000e+00, %v1
ret double %subtmp
}
define double @"binary>"(double %lhs, double %rhs) {
entry:
%0 = alloca double
store double %lhs, double* %0
%1 = alloca double
store double %rhs, double* %1
%rhs1 = load double* %1
%lhs2 = load double* %0
%cmptmp = fcmp ule double %rhs1, %lhs2
%booltmp = uitofp i1 %cmptmp to double
ret double %booltmp
}
define double @"binary|"(double %lhs, double %rhs) {
entry:
%0 = alloca double
store double %lhs, double* %0
%1 = alloca double
store double %rhs, double* %1
%lhs1 = load double* %0
%booltmp = fptoui double %lhs1 to i1
br i1 %booltmp, label %merge, label %else
else: ; preds = %entry
%rhs2 = load double* %1
%booltmp3 = fptoui double %rhs2 to i1
br i1 %booltmp3, label %merge, label %else5
merge: ; preds = %else5, %else, %entry
%iftmp7 = phi double [ 1.000000e+00, %entry ], [ 0.000000e+00, %else5 ], [ 1.000000e+00, %else ]
ret double %iftmp7
else5: ; preds = %else
br label %merge
}
define double @"binary&"(double %lhs, double %rhs) {
entry:
%0 = alloca double
store double %lhs, double* %0
%1 = alloca double
store double %rhs, double* %1
%lhs1 = load double* %0
%unop = call double @"unary!"(double %lhs1)
%booltmp = fptoui double %unop to i1
br i1 %booltmp, label %then, label %else
then: ; preds = %entry
br label %merge
else: ; preds = %entry
%rhs2 = load double* %1
%unop3 = call double @"unary!"(double %rhs2)
%unop4 = call double @"unary!"(double %unop3)
br label %merge
merge: ; preds = %else, %then
%iftmp = phi double [ 0.000000e+00, %then ], [ %unop4, %else ]
ret double %iftmp
}
define double @"binary:"(double %x, double %y) {
entry:
%0 = alloca double
store double %x, double* %0
%1 = alloca double
store double %y, double* %1
%y1 = load double* %1
ret double %y1
}
define double @printdensity(double %d) {
entry:
%0 = alloca double
store double %d, double* %0
%d1 = load double* %0
%binop = call double @"binary>"(double %d1, double 8.000000e+00)
%booltmp = fptoui double %binop to i1
br i1 %booltmp, label %then, label %else
then: ; preds = %entry
%calltmp = call double @put(double 3.200000e+01)
br label %merge
else: ; preds = %entry
%d2 = load double* %0
%binop3 = call double @"binary>"(double %d2, double 4.000000e+00)
%booltmp4 = fptoui double %binop3 to i1
br i1 %booltmp4, label %then5, label %else6
merge: ; preds = %then12, %else13, %then5, %then
%iftmp18 = phi double [ %calltmp, %then ], [ %calltmp8, %then5 ], [ %calltmp15, %then12 ], [ %calltmp16, %else13 ]
ret double %iftmp18
then5: ; preds = %else
%calltmp8 = call double @put(double 4.600000e+01)
br label %merge
else6: ; preds = %else
%d9 = load double* %0
%binop10 = call double @"binary>"(double %d9, double 2.000000e+00)
%booltmp11 = fptoui double %binop10 to i1
br i1 %booltmp11, label %then12, label %else13
then12: ; preds = %else6
%calltmp15 = call double @put(double 4.300000e+01)
br label %merge
else13: ; preds = %else6
%calltmp16 = call double @put(double 4.200000e+01)
br label %merge
}
define double @mandleconverger(double %real, double %imag, double %iters, double %creal, double %cimag) {
entry:
%0 = alloca double
store double %real, double* %0
%1 = alloca double
store double %imag, double* %1
%2 = alloca double
store double %iters, double* %2
%3 = alloca double
store double %creal, double* %3
%4 = alloca double
store double %cimag, double* %4
%iters1 = load double* %2
%binop = call double @"binary>"(double %iters1, double 2.550000e+02)
%real2 = load double* %0
%real3 = load double* %0
%multmp = fmul double %real2, %real3
%imag4 = load double* %1
%addtmp = fadd double %multmp, %imag4
%imag5 = load double* %1
%multmp6 = fmul double %addtmp, %imag5
%binop7 = call double @"binary>"(double %multmp6, double 4.000000e+00)
%binop8 = call double @"binary|"(double %binop, double %binop7)
%booltmp = fptoui double %binop8 to i1
br i1 %booltmp, label %then, label %else
then: ; preds = %entry
%iters9 = load double* %2
br label %merge
else: ; preds = %entry
%real10 = load double* %0
%real11 = load double* %0
%multmp12 = fmul double %real10, %real11
%imag13 = load double* %1
%subtmp = fsub double %multmp12, %imag13
%imag14 = load double* %1
%multmp15 = fmul double %subtmp, %imag14
%creal16 = load double* %3
%addtmp17 = fadd double %multmp15, %creal16
%real18 = load double* %0
%multmp19 = fmul double 2.000000e+00, %real18
%imag20 = load double* %1
%multmp21 = fmul double %multmp19, %imag20
%cimag22 = load double* %4
%addtmp23 = fadd double %multmp21, %cimag22
%iters24 = load double* %2
%addtmp25 = fadd double %iters24, 1.000000e+00
%creal26 = load double* %3
%cimag27 = load double* %4
%calltmp = call double @mandleconverger(double %addtmp17, double %addtmp23, double %addtmp25, double %creal26, double %cimag27)
br label %merge
merge: ; preds = %else, %then
%iftmp = phi double [ %iters9, %then ], [ %calltmp, %else ]
ret double %iftmp
}
define double @mandleconverge(double %real2, double %imag2) {
entry:
%0 = alloca double
store double %real2, double* %0
%1 = alloca double
store double %imag2, double* %1
%real21 = load double* %0
%imag22 = load double* %1
%real23 = load double* %0
%imag24 = load double* %1
%calltmp = call double @mandleconverger(double %real21, double %imag22, double 0.000000e+00, double %real23, double %imag24)
ret double %calltmp
}
define double @mandel(double %xmin, double %xstep, double %xcount, double %ymin, double %ystep, double %ycount) {
entry:
%0 = alloca double
store double %xmin, double* %0
%1 = alloca double
store double %xstep, double* %1
%2 = alloca double
store double %xcount, double* %2
%3 = alloca double
store double %ymin, double* %3
%4 = alloca double
store double %ystep, double* %4
%5 = alloca double
store double %ycount, double* %5
%6 = alloca double
%ymin1 = load double* %3
store double %ymin1, double* %6
br label %7
; <label>:7 ; preds = %afterloop, %entry
%8 = alloca double
%xmin2 = load double* %0
store double %xmin2, double* %8
br label %9
; <label>:9 ; preds = %9, %7
%x = load double* %8
%y = load double* %6
%calltmp = call double @mandleconverge(double %x, double %y)
%calltmp3 = call double @printdensity(double %calltmp)
%xstep4 = load double* %1
%x5 = load double* %8
%nextvar = fadd double %x5, %xstep4
store double %nextvar, double* %8
%x6 = load double* %8
%xmin7 = load double* %0
%xcount8 = load double* %2
%xstep9 = load double* %1
%multmp = fmul double %xcount8, %xstep9
%addtmp = fadd double %xmin7, %multmp
%cmptmp = fcmp ule double %x6, %addtmp
%booltmp = uitofp i1 %cmptmp to double
%loopcond = fcmp oeq double %booltmp, 0.000000e+00
br i1 %loopcond, label %afterloop, label %9
afterloop: ; preds = %9
%calltmp10 = call double @put(double 1.000000e+01)
%binop = call double @"binary:"(double %x5, double %calltmp10)
%ystep11 = load double* %4
%y12 = load double* %6
%nextvar13 = fadd double %y12, %ystep11
store double %nextvar13, double* %6
%y14 = load double* %6
%ymin15 = load double* %3
%ycount16 = load double* %5
%ystep17 = load double* %4
%multmp18 = fmul double %ycount16, %ystep17
%addtmp19 = fadd double %ymin15, %multmp18
%cmptmp20 = fcmp ule double %y14, %addtmp19
%booltmp21 = uitofp i1 %cmptmp20 to double
%loopcond23 = fcmp oeq double %booltmp21, 0.000000e+00
br i1 %loopcond23, label %afterloop22, label %7
afterloop22: ; preds = %afterloop
ret double %y12
}
define double @0() {
entry:
%unop = call double @unary-(double 3.000000e+00)
%unop1 = call double @unary-(double 2.400000e+00)
%calltmp = call double @mandel(double %unop, double 3.000000e-02, double 1.700000e+02, double %unop1, double 1.000000e-01, double 4.500000e+01)
ret double %calltmp
}
define i32 @main(i32) {
%2 = call double @0()
ret i32 0
}
Function parsed unary! with v
Function parsed unary- with v
Function parsed binary> with lhs-rhs
Function parsed binary| with lhs-rhs
Function parsed binary& with lhs-rhs
Function parsed binary: with x-y
Function parsed printdensity
Function parsed printdensity with d
Function parsed mandleconverger
Function parsed mandleconverger with real-imag-iters-creal-cimag
Function parsed mandleconverge
Function parsed mandleconverge with real2-imag2
Function parsed mandel
Function parsed mandel with xmin-xstep-xcount-ymin-ystep-ycount
Evaluated mandel(-3.0,0.03,170.0,-2.4,0.1,45.0) to 2.0000000000000018
*********************************************************************************************************************************++++++++++++++++++++++++++++++++++++++++++
*****************************************************************************************************************************++++++++++++++++++++++++++++++++++++++++++++++
*************************************************************************************************************************++++++++++++++++++++++++++++++++++++++++++++++++++
***********************************************************************************+++*****************************++++++++++++++++++++++++++++++++++++++++++++++++++++++++
***********************************************************************************++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
**********************************************************************************.++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
**********************************************************************************.++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*********************************************************************************...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*********************************************************************************...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
********************************************************************************..+.++.++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*******************************************************************************.....+. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
******************************************************************************...+.... .++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*****************************************************************************...+.. .. .+.++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
***************************************************************************....+... . .++..+++++++++++++++++++++++++++++*******************+++++++++++++++++++++++++++++
**************************************************************************...++.... ...++++..++++++++++++++++++++++++***************************+++++++++++++++++++++
************************************************************************..++++.... ......+++++......+++++++++++++++*********************************++++++++++++++
*********************************************************************..++++++... ............................++++**************************************++++++
*******************************************************************.+++++++... ......... .***************************************
****************************************************************.+++++++... .... ......+++++++++++++++********************************
************************************************************.++++++++.......... ......+++++++++++++++++++++++++********************
*******************************************************.++++++++....++++...... ........++++++++++++++++++++++++++++++++++++***
*************************************************.++++++++...+++++++++..... .......+++++++++++++++++++++++++++++
**************************************..++++++++...+++++++++++++++..... .. . ... ++++++++++++++++
******************...++++.....++++++++++++++++++++++++++++++.......... .... . ........................
++++++++++++++++++++++++++++++++++++++++++++++++++++....................... .......+++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++................. ...++++++++++++++++++++++++++++******************
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++............... ...++++++++++++++++++++****************************
+++++++++.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++............ ...++++++++++++++***********************************
*********++++++++++++++.+++++++++++++++++++++++++++++++++++++++++++++++........... .....+++++++++***************************************
******************+*******+++++.+++++++++++++++++++++++++++++++++++++++++.......... ....+++++++++******************************************
************************************.++++++++++++++++++++++++++++++++++++++........ ....+++++++++*********************************************
******************************************+++++++++++++++++++++++++++++++++++...... . ...++++++++***********************************************
***********************************************++++++++++++++++++++++++++++++++..... ....+++++.. ...++++**************************************************
**************************************************++++++++++++++++++++++++++++++.... .++++++++++++++*******************************************************
****************************************************+++++++++++++++++++++++++++++... ... ......+++++++**************************************************************
******************************************************++++++++++++++++++++++++++++.. ... ..........**********************************************************************
********************************************************+++++++++++++++++++++++++++. ... ......***************************************************************************
************************************************************+++++++++++++++++++++++..++. ....******************************************************************************
****************************************************************+++++++++++++++++++.+++ ...********************************************************************************
*********************************************************************++++++++++++++++++..**********************************************************************************
**************************************************************************++++++++++++..***********************************************************************************
*******************************************************************************+++++++.************************************************************************************
*************************************************************************************+*************************************************************************************
***************************************************************************************************************************************************************************
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment