xo-jit: + example/ex_cpp
This commit is contained in:
parent
97d095a055
commit
0ee004cec6
3 changed files with 206 additions and 0 deletions
58
example/ex_cpp/tmp.ll
Normal file
58
example/ex_cpp/tmp.ll
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
define double @root4(ptr %.env, double %x) {
|
||||
entry:
|
||||
%x1 = alloca double, align 8
|
||||
store double %x, ptr %x1, align 8
|
||||
%x2 = load double, ptr %x1, align 8
|
||||
%calltmp = call double @w.sqrt(ptr null, double %x2)
|
||||
%calltmp3 = call double @w.sqrt(ptr null, double %calltmp)
|
||||
ret double %calltmp3
|
||||
}
|
||||
|
||||
; ----------------------------------------------------------------
|
||||
|
||||
define double @twice(ptr %.env, { ptr, ptr } %f, double %x) {
|
||||
entry:
|
||||
%f1 = alloca { ptr, ptr }, align 8
|
||||
store { ptr, ptr } %f, ptr %f1, align 8
|
||||
%x2 = alloca double, align 8
|
||||
store double %x, ptr %x2, align 8
|
||||
%f3 = load { ptr, ptr }, ptr %f1, align 8
|
||||
%fnptr = extractvalue { ptr, ptr } %f3, 0
|
||||
%envptr = extractvalue { ptr, ptr } %f3, 1
|
||||
%f4 = load { ptr, ptr }, ptr %f1, align 8
|
||||
%fnptr5 = extractvalue { ptr, ptr } %f4, 0
|
||||
%envptr6 = extractvalue { ptr, ptr } %f4, 1
|
||||
%x7 = load double, ptr %x2, align 8
|
||||
%calltmp = call double %fnptr5(ptr %envptr6, double %x7)
|
||||
%calltmp8 = call double %fnptr(ptr %envptr, double %calltmp)
|
||||
ret double %calltmp8
|
||||
}
|
||||
|
||||
|
||||
define double @twice(ptr %.env, { ptr, ptr } %f, double %x) {
|
||||
entry:
|
||||
%f1 = alloca { ptr, ptr }, align 8
|
||||
%f.elt = extractvalue { ptr, ptr } %f, 0
|
||||
store ptr %f.elt, ptr %f1, align 8
|
||||
%f1.repack9 = getelementptr inbounds { ptr, ptr }, ptr %f1, i64 0, i32 1
|
||||
%f.elt10 = extractvalue { ptr, ptr } %f, 1
|
||||
store ptr %f.elt10, ptr %f1.repack9, align 8
|
||||
%calltmp = call double %f.elt(ptr %f.elt10, double %x)
|
||||
%calltmp8 = call double %f.elt(ptr %f.elt10, double %calltmp)
|
||||
ret double %calltmp8
|
||||
}
|
||||
|
||||
|
||||
;; ----------------------------------------------------------------
|
||||
|
||||
define double @root_2x(ptr %.env, double %x2) {
|
||||
entry:
|
||||
%x21 = alloca double, align 8
|
||||
store double %x2, ptr %x21, align 8
|
||||
%envptr = insertvalue { ptr, ptr } { ptr @twice, ptr undef }, ptr %.env, 1
|
||||
%fnptr = extractvalue { ptr, ptr } %envptr, 0
|
||||
%envptr2 = extractvalue { ptr, ptr } %envptr, 1
|
||||
%x23 = load double, ptr %x21, align 8
|
||||
%calltmp = call double %fnptr(ptr %envptr2, { ptr, ptr } { ptr @w.sqrt, ptr null }, double %x23)
|
||||
ret double %calltmp
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue