//===-- CBackend.cpp - Library for converting LLVM code to C ----------------------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===------------------------------------------------------------------------------===//
//
// Tests if the CBE will execute a fibonacci numbers example.
// Credit: http://en.literateprograms.org/Fibonacci_numbers_(C)
// *TW
//===------------------------------------------------------------------------------===//

unsigned int fastfib(unsigned int n);

int main(){
    return fastfib(6) - 2;
}

unsigned int fastfib(unsigned int n){
    unsigned int a[3];
    unsigned int *p=a;
    unsigned int i;

    for(i=0; i<=n; ++i) {
        if(i<2) *p=i;
        else{
            if(p==a) *p=*(a+1)+*(a+2);
            else if(p==a+1) *p=*a+*(a+2);
            else *p=*a+*(a+1);
        }
        if(++p>a+2) p=a;
    }
    return p==a?*(p+2):*(p-1);
}