Created
October 22, 2016 18:03
-
-
Save bluss/354a3ac867e4d97b49da643067a43927 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ; ModuleID = 'chain_bool.cgu-0.rs' | |
| source_filename = "chain_bool.cgu-0.rs" | |
| target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" | |
| target triple = "x86_64-unknown-linux-gnu" | |
| %"8.unwind::libunwind::_Unwind_Exception" = type { i64, void (i32, %"8.unwind::libunwind::_Unwind_Exception"*)*, [6 x i64] } | |
| %"8.unwind::libunwind::_Unwind_Context" = type {} | |
| ; Function Attrs: uwtable | |
| define i64 @range_chain_default_fold(i64, i64, i64 (i64, i64)* nocapture) unnamed_addr #0 personality i32 (i32, i32, i64, %"8.unwind::libunwind::_Unwind_Exception"*, %"8.unwind::libunwind::_Unwind_Context"*)* @rust_eh_personality { | |
| entry-block: | |
| br label %bb2.outer | |
| bb2.outer: ; preds = %bb11, %entry-block | |
| %self_.sroa.0.0.ph = phi i64 [ %self_.sroa.0.0.ph3858, %bb11 ], [ 0, %entry-block ] | |
| %self_.sroa.7.0.ph = phi i64 [ %10, %bb11 ], [ 0, %entry-block ] | |
| %self_.sroa.12.0.ph = phi i8 [ 0, %bb11 ], [ 1, %entry-block ] | |
| %accum.0.ph = phi i64 [ %11, %bb11 ], [ 0, %entry-block ] | |
| %3 = icmp eq i8 %self_.sroa.12.0.ph, 0 | |
| %4 = icmp ult i64 %self_.sroa.0.0.ph, %0 | |
| br i1 %4, label %bb2.us.preheader, label %bb2.preheader | |
| bb2.us.preheader: ; preds = %bb2.outer | |
| br label %bb2.us | |
| bb2.preheader.loopexit: ; preds = %bb7 | |
| br label %bb2.preheader | |
| bb2.preheader: ; preds = %bb2.preheader.loopexit, %bb2.outer | |
| %self_.sroa.0.0.ph38.lcssa = phi i64 [ %self_.sroa.0.0.ph, %bb2.outer ], [ %7, %bb2.preheader.loopexit ] | |
| %accum.0.ph41.lcssa = phi i64 [ %accum.0.ph, %bb2.outer ], [ %8, %bb2.preheader.loopexit ] | |
| br label %bb2 | |
| bb2.us: ; preds = %bb2.us.preheader, %bb7 | |
| %accum.0.ph4160 = phi i64 [ %8, %bb7 ], [ %accum.0.ph, %bb2.us.preheader ] | |
| %self_.sroa.0.0.ph3859 = phi i64 [ %7, %bb7 ], [ %self_.sroa.0.0.ph, %bb2.us.preheader ] | |
| br i1 %3, label %bb4.loopexit62, label %bb7 | |
| bb2: ; preds = %bb2.preheader, %bb2 | |
| %self_.sroa.12.0 = phi i8 [ 0, %bb2 ], [ %self_.sroa.12.0.ph, %bb2.preheader ] | |
| %5 = icmp eq i8 %self_.sroa.12.0, 0 | |
| br i1 %5, label %bb4.loopexit, label %bb2 | |
| bb4.loopexit: ; preds = %bb2 | |
| br label %bb4 | |
| bb4.loopexit62: ; preds = %bb2.us | |
| br label %bb4 | |
| bb4: ; preds = %bb4.loopexit62, %bb4.loopexit | |
| %self_.sroa.0.0.ph3858 = phi i64 [ %self_.sroa.0.0.ph38.lcssa, %bb4.loopexit ], [ %self_.sroa.0.0.ph3859, %bb4.loopexit62 ] | |
| %accum.0.ph4156 = phi i64 [ %accum.0.ph41.lcssa, %bb4.loopexit ], [ %accum.0.ph4160, %bb4.loopexit62 ] | |
| %6 = icmp ult i64 %self_.sroa.7.0.ph, %1 | |
| br i1 %6, label %bb11, label %bb10 | |
| bb7: ; preds = %bb2.us | |
| %7 = add i64 %self_.sroa.0.0.ph3859, 1 | |
| %8 = tail call i64 %2(i64 %accum.0.ph4160, i64 %self_.sroa.0.0.ph3859) | |
| %9 = icmp ult i64 %7, %0 | |
| br i1 %9, label %bb2.us, label %bb2.preheader.loopexit | |
| bb10: ; preds = %bb4 | |
| ret i64 %accum.0.ph4156 | |
| bb11: ; preds = %bb4 | |
| %10 = add i64 %self_.sroa.7.0.ph, 1 | |
| %11 = tail call i64 %2(i64 %accum.0.ph4156, i64 %self_.sroa.7.0.ph) | |
| br label %bb2.outer | |
| } | |
| ; Function Attrs: nounwind | |
| declare i32 @rust_eh_personality(i32, i32, i64, %"8.unwind::libunwind::_Unwind_Exception"*, %"8.unwind::libunwind::_Unwind_Context"*) unnamed_addr #1 | |
| attributes #0 = { uwtable } | |
| attributes #1 = { nounwind } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #![crate_type="lib"] | |
| #[no_mangle] | |
| pub fn range_chain_default_fold(xs: usize, ys: usize, f: fn(usize, usize) -> usize) -> usize { | |
| let mut accum = 0; | |
| let mut self_ = chain(0..xs, 0..ys); | |
| loop { | |
| if self_.front_active { | |
| match self_.a.next() { | |
| Some(elt) => { | |
| accum = f(accum, elt); | |
| } | |
| None => { | |
| self_.front_active = false; | |
| continue; | |
| } | |
| } | |
| } else { | |
| let value = self_.b.next(); | |
| match value { | |
| Some(elt) => accum = f(accum, elt), | |
| None => break, | |
| } | |
| }; | |
| } | |
| accum | |
| } | |
| struct Chain<A, B> { | |
| a: A, | |
| b: B, | |
| front_active: bool, | |
| } | |
| fn chain<A, B>(a: A, b: B) -> Chain<A::IntoIter, B::IntoIter> | |
| where A: IntoIterator, B: IntoIterator<Item=A::Item>, | |
| { | |
| Chain { | |
| a: a.into_iter(), | |
| b: b.into_iter(), | |
| front_active: true, | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| .text | |
| .file "chain_bool.cgu-0.rs" | |
| .section .text.range_chain_default_fold,"ax",@progbits | |
| .globl range_chain_default_fold | |
| .p2align 4, 0x90 | |
| .type range_chain_default_fold,@function | |
| range_chain_default_fold: | |
| .cfi_startproc | |
| pushq %rbp | |
| .Ltmp0: | |
| .cfi_def_cfa_offset 16 | |
| pushq %r15 | |
| .Ltmp1: | |
| .cfi_def_cfa_offset 24 | |
| pushq %r14 | |
| .Ltmp2: | |
| .cfi_def_cfa_offset 32 | |
| pushq %r13 | |
| .Ltmp3: | |
| .cfi_def_cfa_offset 40 | |
| pushq %r12 | |
| .Ltmp4: | |
| .cfi_def_cfa_offset 48 | |
| pushq %rbx | |
| .Ltmp5: | |
| .cfi_def_cfa_offset 56 | |
| pushq %rax | |
| .Ltmp6: | |
| .cfi_def_cfa_offset 64 | |
| .Ltmp7: | |
| .cfi_offset %rbx, -56 | |
| .Ltmp8: | |
| .cfi_offset %r12, -48 | |
| .Ltmp9: | |
| .cfi_offset %r13, -40 | |
| .Ltmp10: | |
| .cfi_offset %r14, -32 | |
| .Ltmp11: | |
| .cfi_offset %r15, -24 | |
| .Ltmp12: | |
| .cfi_offset %rbp, -16 | |
| movq %rdx, %r15 | |
| movq %rsi, %r14 | |
| movq %rdi, %r12 | |
| movb $1, %bpl | |
| xorl %ebx, %ebx | |
| xorl %r13d, %r13d | |
| xorl %eax, %eax | |
| jmp .LBB0_1 | |
| .p2align 4, 0x90 | |
| .LBB0_3: | |
| movq %rbx, %rsi | |
| incq %rbx | |
| movq %rax, %rdi | |
| callq *%r15 | |
| .LBB0_1: | |
| cmpq %r12, %rbx | |
| jae .LBB0_4 | |
| testb %bpl, %bpl | |
| jne .LBB0_3 | |
| jmp .LBB0_5 | |
| .p2align 4, 0x90 | |
| .LBB0_4: | |
| testb %bpl, %bpl | |
| movl $0, %ebp | |
| jne .LBB0_4 | |
| .LBB0_5: | |
| cmpq %r14, %r13 | |
| jae .LBB0_6 | |
| movq %r13, %rsi | |
| incq %r13 | |
| movq %rax, %rdi | |
| callq *%r15 | |
| xorl %ebp, %ebp | |
| jmp .LBB0_1 | |
| .LBB0_6: | |
| addq $8, %rsp | |
| popq %rbx | |
| popq %r12 | |
| popq %r13 | |
| popq %r14 | |
| popq %r15 | |
| popq %rbp | |
| retq | |
| .Lfunc_end0: | |
| .size range_chain_default_fold, .Lfunc_end0-range_chain_default_fold | |
| .cfi_endproc | |
| .section ".note.GNU-stack","",@progbits |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment