| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
| ; RUN: llc -O3 -mtriple=aarch64-linux-gnu < %s | FileCheck %s |
| |
| define i32 @test(i32 %input, i32 %n, i32 %a) { |
| ; CHECK-LABEL: test: |
| ; CHECK: // %bb.0: // %entry |
| ; CHECK-NEXT: cbz w1, .LBB0_2 |
| ; CHECK-NEXT: // %bb.1: |
| ; CHECK-NEXT: mov w0, wzr |
| ; CHECK-NEXT: ret |
| ; CHECK-NEXT: .LBB0_2: // %bb.0 |
| ; CHECK-NEXT: add w8, w0, w1 |
| ; CHECK-NEXT: mov w0, #100 // =0x64 |
| ; CHECK-NEXT: cmp w8, #1 |
| ; CHECK-NEXT: b.le .LBB0_7 |
| ; CHECK-NEXT: // %bb.3: // %bb.0 |
| ; CHECK-NEXT: cmp w8, #2 |
| ; CHECK-NEXT: b.eq .LBB0_10 |
| ; CHECK-NEXT: // %bb.4: // %bb.0 |
| ; CHECK-NEXT: cmp w8, #4 |
| ; CHECK-NEXT: b.eq .LBB0_11 |
| ; CHECK-NEXT: // %bb.5: // %bb.0 |
| ; CHECK-NEXT: cmp w8, #200 |
| ; CHECK-NEXT: b.ne .LBB0_12 |
| ; CHECK-NEXT: // %bb.6: // %sw.bb7 |
| ; CHECK-NEXT: add w0, w2, #7 |
| ; CHECK-NEXT: ret |
| ; CHECK-NEXT: .LBB0_7: // %bb.0 |
| ; CHECK-NEXT: cbz w8, .LBB0_13 |
| ; CHECK-NEXT: // %bb.8: // %bb.0 |
| ; CHECK-NEXT: cmp w8, #1 |
| ; CHECK-NEXT: b.ne .LBB0_12 |
| ; CHECK-NEXT: // %bb.9: // %sw.bb1 |
| ; CHECK-NEXT: add w0, w2, #3 |
| ; CHECK-NEXT: ret |
| ; CHECK-NEXT: .LBB0_10: // %sw.bb3 |
| ; CHECK-NEXT: add w0, w2, #4 |
| ; CHECK-NEXT: ret |
| ; CHECK-NEXT: .LBB0_11: // %sw.bb5 |
| ; CHECK-NEXT: add w0, w2, #5 |
| ; CHECK-NEXT: .LBB0_12: // %return |
| ; CHECK-NEXT: ret |
| ; CHECK-NEXT: .LBB0_13: // %sw.bb |
| ; CHECK-NEXT: add w0, w2, #1 |
| ; CHECK-NEXT: ret |
| entry: |
| %b = add nsw i32 %input, %n |
| %cmp = icmp eq i32 %n, 0 |
| br i1 %cmp, label %bb.0, label %return |
| |
| bb.0: |
| switch i32 %b, label %return [ |
| i32 0, label %sw.bb |
| i32 1, label %sw.bb1 |
| i32 2, label %sw.bb3 |
| i32 4, label %sw.bb5 |
| i32 200, label %sw.bb7 |
| ] |
| |
| sw.bb: |
| %add = add nsw i32 %a, 1 |
| br label %return |
| |
| sw.bb1: |
| %add2 = add nsw i32 %a, 3 |
| br label %return |
| |
| sw.bb3: |
| %add4 = add nsw i32 %a, 4 |
| br label %return |
| |
| sw.bb5: |
| %add6 = add nsw i32 %a, 5 |
| br label %return |
| |
| sw.bb7: |
| %add8 = add nsw i32 %a, 7 |
| br label %return |
| |
| return: |
| %retval.0 = phi i32 [ %add8, %sw.bb7 ], [ %add6, %sw.bb5 ], [ %add4, %sw.bb3 ], [ %add2, %sw.bb1 ], [ %add, %sw.bb ], [ 100, %bb.0 ], [ 0, %entry ] |
| ret i32 %retval.0 |
| } |
| |