| ; NOTE: Assertions have been autogenerated by utils/update_llubi_test_checks.py UTC_ARGS: --version 6 |
| ; RUN: not llubi --verbose --max-stack-depth 10 < %s 2>&1 | FileCheck %s |
| |
| define i32 @fib(i32 %n) { |
| entry: |
| %cmp = icmp ugt i32 %n, 1 |
| br i1 %cmp, label %if.then, label %if.else |
| |
| if.then: |
| %sub1 = sub i32 %n, 1 |
| %sub2 = sub i32 %n, 2 |
| %call1 = call i32 @fib(i32 %sub1) |
| %call2 = call i32 @fib(i32 %sub2) |
| %add = add i32 %call1, %call2 |
| ret i32 %add |
| |
| if.else: |
| ret i32 1 |
| } |
| |
| define void @main() { |
| entry: |
| %res1 = call i32 @fib(i32 2) |
| %res2 = call i32 @fib(i32 50) |
| ret void |
| } |
| ; CHECK: Entering function: main |
| ; CHECK-NEXT: Entering function: fib |
| ; CHECK-NEXT: i32 %n = i32 2 |
| ; CHECK-NEXT: %cmp = icmp ugt i32 %n, 1 => T |
| ; CHECK-NEXT: br i1 %cmp, label %if.then, label %if.else jump to %if.then |
| ; CHECK-NEXT: %sub1 = sub i32 %n, 1 => i32 1 |
| ; CHECK-NEXT: %sub2 = sub i32 %n, 2 => i32 0 |
| ; CHECK-NEXT: Entering function: fib |
| ; CHECK-NEXT: i32 %n = i32 1 |
| ; CHECK-NEXT: %cmp = icmp ugt i32 %n, 1 => F |
| ; CHECK-NEXT: br i1 %cmp, label %if.then, label %if.else jump to %if.else |
| ; CHECK-NEXT: ret i32 1 |
| ; CHECK-NEXT: Exiting function: fib |
| ; CHECK-NEXT: %call1 = call i32 @fib(i32 %sub1) => i32 1 |
| ; CHECK-NEXT: Entering function: fib |
| ; CHECK-NEXT: i32 %n = i32 0 |
| ; CHECK-NEXT: %cmp = icmp ugt i32 %n, 1 => F |
| ; CHECK-NEXT: br i1 %cmp, label %if.then, label %if.else jump to %if.else |
| ; CHECK-NEXT: ret i32 1 |
| ; CHECK-NEXT: Exiting function: fib |
| ; CHECK-NEXT: %call2 = call i32 @fib(i32 %sub2) => i32 1 |
| ; CHECK-NEXT: %add = add i32 %call1, %call2 => i32 2 |
| ; CHECK-NEXT: ret i32 %add |
| ; CHECK-NEXT: Exiting function: fib |
| ; CHECK-NEXT: %res1 = call i32 @fib(i32 2) => i32 2 |
| ; CHECK-NEXT: Entering function: fib |
| ; CHECK-NEXT: i32 %n = i32 50 |
| ; CHECK-NEXT: %cmp = icmp ugt i32 %n, 1 => T |
| ; CHECK-NEXT: br i1 %cmp, label %if.then, label %if.else jump to %if.then |
| ; CHECK-NEXT: %sub1 = sub i32 %n, 1 => i32 49 |
| ; CHECK-NEXT: %sub2 = sub i32 %n, 2 => i32 48 |
| ; CHECK-NEXT: Entering function: fib |
| ; CHECK-NEXT: i32 %n = i32 49 |
| ; CHECK-NEXT: %cmp = icmp ugt i32 %n, 1 => T |
| ; CHECK-NEXT: br i1 %cmp, label %if.then, label %if.else jump to %if.then |
| ; CHECK-NEXT: %sub1 = sub i32 %n, 1 => i32 48 |
| ; CHECK-NEXT: %sub2 = sub i32 %n, 2 => i32 47 |
| ; CHECK-NEXT: Entering function: fib |
| ; CHECK-NEXT: i32 %n = i32 48 |
| ; CHECK-NEXT: %cmp = icmp ugt i32 %n, 1 => T |
| ; CHECK-NEXT: br i1 %cmp, label %if.then, label %if.else jump to %if.then |
| ; CHECK-NEXT: %sub1 = sub i32 %n, 1 => i32 47 |
| ; CHECK-NEXT: %sub2 = sub i32 %n, 2 => i32 46 |
| ; CHECK-NEXT: Entering function: fib |
| ; CHECK-NEXT: i32 %n = i32 47 |
| ; CHECK-NEXT: %cmp = icmp ugt i32 %n, 1 => T |
| ; CHECK-NEXT: br i1 %cmp, label %if.then, label %if.else jump to %if.then |
| ; CHECK-NEXT: %sub1 = sub i32 %n, 1 => i32 46 |
| ; CHECK-NEXT: %sub2 = sub i32 %n, 2 => i32 45 |
| ; CHECK-NEXT: Entering function: fib |
| ; CHECK-NEXT: i32 %n = i32 46 |
| ; CHECK-NEXT: %cmp = icmp ugt i32 %n, 1 => T |
| ; CHECK-NEXT: br i1 %cmp, label %if.then, label %if.else jump to %if.then |
| ; CHECK-NEXT: %sub1 = sub i32 %n, 1 => i32 45 |
| ; CHECK-NEXT: %sub2 = sub i32 %n, 2 => i32 44 |
| ; CHECK-NEXT: Entering function: fib |
| ; CHECK-NEXT: i32 %n = i32 45 |
| ; CHECK-NEXT: %cmp = icmp ugt i32 %n, 1 => T |
| ; CHECK-NEXT: br i1 %cmp, label %if.then, label %if.else jump to %if.then |
| ; CHECK-NEXT: %sub1 = sub i32 %n, 1 => i32 44 |
| ; CHECK-NEXT: %sub2 = sub i32 %n, 2 => i32 43 |
| ; CHECK-NEXT: Entering function: fib |
| ; CHECK-NEXT: i32 %n = i32 44 |
| ; CHECK-NEXT: %cmp = icmp ugt i32 %n, 1 => T |
| ; CHECK-NEXT: br i1 %cmp, label %if.then, label %if.else jump to %if.then |
| ; CHECK-NEXT: %sub1 = sub i32 %n, 1 => i32 43 |
| ; CHECK-NEXT: %sub2 = sub i32 %n, 2 => i32 42 |
| ; CHECK-NEXT: Entering function: fib |
| ; CHECK-NEXT: i32 %n = i32 43 |
| ; CHECK-NEXT: %cmp = icmp ugt i32 %n, 1 => T |
| ; CHECK-NEXT: br i1 %cmp, label %if.then, label %if.else jump to %if.then |
| ; CHECK-NEXT: %sub1 = sub i32 %n, 1 => i32 42 |
| ; CHECK-NEXT: %sub2 = sub i32 %n, 2 => i32 41 |
| ; CHECK-NEXT: Entering function: fib |
| ; CHECK-NEXT: i32 %n = i32 42 |
| ; CHECK-NEXT: %cmp = icmp ugt i32 %n, 1 => T |
| ; CHECK-NEXT: br i1 %cmp, label %if.then, label %if.else jump to %if.then |
| ; CHECK-NEXT: %sub1 = sub i32 %n, 1 => i32 41 |
| ; CHECK-NEXT: %sub2 = sub i32 %n, 2 => i32 40 |
| ; CHECK-NEXT: Error: Maximum stack depth exceeded. |
| ; CHECK-NEXT: error: Execution of function 'main' failed. |