Skip to content

Instantly share code, notes, and snippets.

@yuyichao
Created May 15, 2016 04:22
Show Gist options
  • Save yuyichao/bdff579131fcd35701a0ce114a3b7573 to your computer and use it in GitHub Desktop.
Save yuyichao/bdff579131fcd35701a0ce114a3b7573 to your computer and use it in GitHub Desktop.
define %jl_value_t* @julia_eu78_49781(i64) #0 !dbg !6 {
top:
%1 = icmp sgt i64 %0, 0
%2 = select i1 %1, i64 %0, i64 0
%3 = add i64 %2, 1
br label %L
L: ; preds = %if, %top
%"#temp#.0" = phi i64 [ 1, %top ], [ %5, %if ]
%4 = icmp eq i64 %"#temp#.0", %3
br i1 %4, label %L2, label %if
L2: ; preds = %L
ret %jl_value_t* inttoptr (i64 140217202278416 to %jl_value_t*)
if: ; preds = %L
%5 = add i64 %"#temp#.0", 1
%6 = call i64 @julia_p_49782(i64 %"#temp#.0") #0
%7 = call i64 @jlsys_mod_35080(i64 %6, i64 1000000)
%8 = icmp eq i64 %7, 0
br i1 %8, label %if3, label %L
if3: ; preds = %if
%9 = insertvalue [2 x i64] undef, i64 %"#temp#.0", 0
%10 = insertvalue [2 x i64] %9, i64 %6, 1
%11 = call %jl_value_t* @jl_gc_alloc_2w()
%12 = getelementptr inbounds %jl_value_t, %jl_value_t* %11, i64 -1, i32 0
store %jl_value_t* inttoptr (i64 140217202273008 to %jl_value_t*), %jl_value_t** %12, align 8
%13 = bitcast %jl_value_t* %11 to [2 x i64]*
store [2 x i64] %10, [2 x i64]* %13, align 8
ret %jl_value_t* %11
}
define i64 @julia_p_49782.1(i64) #0 !dbg !6 {
top:
%1 = icmp sgt i64 %0, -1
br i1 %1, label %L1, label %if
L1: ; preds = %top
%2 = icmp eq i64 %0, 0
br i1 %2, label %if, label %L3
L3: ; preds = %L1
%3 = add i64 %0, -1
%4 = load i64*, i64** inttoptr (i64 140217275491728 to i64**), align 16
%5 = getelementptr i64, i64* %4, i64 %3
%6 = load i64, i64* %5, align 8
%7 = icmp slt i64 %6, 1
br i1 %7, label %pass15.preheader, label %if11
pass15.preheader: ; preds = %L3
br label %pass15
L8: ; preds = %pass15
%8 = call i64 @jlsys_mod_35080(i64 %26, i64 1000000000)
%9 = load i64*, i64** inttoptr (i64 140217275491728 to i64**), align 16
%10 = getelementptr i64, i64* %9, i64 %3
store i64 %8, i64* %10, align 8
ret i64 %8
if: ; preds = %L1, %top
%merge = phi i64 [ 0, %top ], [ 1, %L1 ]
ret i64 %merge
if11: ; preds = %L3
ret i64 %6
pass15: ; preds = %pass15.preheader, %pass15
%s.019 = phi i64 [ %26, %pass15 ], [ 0, %pass15.preheader ]
%f.018 = phi i64 [ %12, %pass15 ], [ -1, %pass15.preheader ]
%"#temp#.017" = phi i64 [ %11, %pass15 ], [ 1, %pass15.preheader ]
%11 = add i64 %"#temp#.017", 1
%12 = sub i64 0, %f.018
%13 = mul i64 %"#temp#.017", 3
%14 = add i64 %13, 1
%15 = mul i64 %14, %"#temp#.017"
%16 = add i64 %13, -1
%17 = mul i64 %16, %"#temp#.017"
%18 = sdiv i64 %17, 2
%19 = sdiv i64 %15, 2
%20 = sub i64 %0, %18
%21 = call i64 @julia_p_49782(i64 %20) #0
%22 = sub i64 %0, %19
%23 = call i64 @julia_p_49782(i64 %22) #0
%24 = add i64 %23, %21
%25 = mul i64 %24, %12
%26 = add i64 %25, %s.019
%27 = icmp eq i64 %"#temp#.017", %0
br i1 %27, label %L8, label %pass15
}
.text
Filename: euler.jl
Source line: 0
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %r15
xorl %ebx, %ebx
Source line: 29
cmpq $0, %r15
cmovleq %rbx, %r15
Source line: 30
movabsq $p, %r13
Source line: 31
movabsq $mod, %r14
nop
Source line: 29
L48:
cmpq %rbx, %r15
leaq 1(%rbx), %rbx
je L131
Source line: 30
movq %rbx, %rdi
callq *%r13
movq %rax, %r12
Source line: 31
movl $1000000, %esi # imm = 0xF4240
movq %r12, %rdi
callq *%r14
Source line: 248
cmpq $0, %rax
jne L48
Source line: 32
movabsq $jl_gc_alloc_2w, %rax
callq *%rax
movabsq $140217202273008, %rcx # imm = 0x7F86DC886AF0
movq %rcx, -8(%rax)
movq %r12, 8(%rax)
movq %rbx, (%rax)
addq $8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
L131:
movabsq $140217202273008, %rax # imm = 0x7F86DC886AF0
addq $5408, %rax # imm = 0x1520
addq $8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nopw %cs:(%rax,%rax)
.text
Filename: euler.jl
Source line: 0
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $24, %rsp
movq %rdi, %r15
xorl %eax, %eax
Source line: 9
cmpq $-1, %r15
jle L87
movl $1, %eax
Source line: 10
cmpq $0, %r15
je L87
movl $2, %r13d
xorl %r14d, %r14d
movabsq $140217275491728, %rax # imm = 0x7F86E0E5A590
Source line: 12
movq (%rax), %rax
movq -8(%rax,%r15,8), %rax
Source line: 40
cmpq $1, %rax
jl L102
addq $24, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
Source line: 9
L87:
addq $24, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
L102:
movq $-1, %rdx
Source line: 20
movabsq $p, %rbx
xorl %edi, %edi
nopl (%rax)
L128:
movq %rdi, -48(%rbp)
xorl %r12d, %r12d
Source line: 19
addq $1, %r14
leaq 2(%r13), %rcx
imulq %r14, %rcx
Source line: 18
movq %r13, %rax
imulq %r14, %rax
Source line: 17
subq %rdx, %r12
Source line: 18
cqto
Source line: 20
movq %r15, %rdi
movl $2, %esi
Source line: 18
idivq %rsi
Source line: 20
subq %rax, %rdi
Source line: 19
movq %rcx, %rax
cqto
idivq %rsi
movq %rax, -64(%rbp)
Source line: 20
callq *%rbx
movq %rax, -56(%rbp)
movq %r15, %rdi
subq -64(%rbp), %rdi
callq *%rbx
movq -48(%rbp), %rdi
Source line: 32
addq -56(%rbp), %rax
imulq %r12, %rax
addq %rax, %rdi
Source line: 16
addq $3, %r13
movq %r12, %rdx
cmpq %r14, %r15
jne L128
Source line: 24
movabsq $mod, %rax
movl $1000000000, %esi # imm = 0x3B9ACA00
callq *%rax
shlq $3, %r15
movabsq $140217275491728, %rcx # imm = 0x7F86E0E5A590
addq (%rcx), %r15
movq %rax, -8(%r15)
addq $24, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nopl (%rax,%rax)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment