; 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 ; CHECK-NEXT: cmp w8, #4 ; CHECK-NEXT: b.hi .LBB0_5 ; CHECK-NEXT: // %bb.3: // %bb.0 ; CHECK-NEXT: adrp x9, .LJTI0_0 ; CHECK-NEXT: add x9, x9, :lo12:.LJTI0_0 ; CHECK-NEXT: adr x10, .LBB0_4 ; CHECK-NEXT: ldrb w11, [x9, x8] ; CHECK-NEXT: add x10, x10, x11, lsl #2 ; CHECK-NEXT: br x10 ; CHECK-NEXT: .LBB0_4: // %sw.bb ; CHECK-NEXT: add w0, w2, #1 ; CHECK-NEXT: ret ; CHECK-NEXT: .LBB0_5: // %bb.0 ; CHECK-NEXT: cmp w8, #200 ; CHECK-NEXT: b.ne .LBB0_10 ; CHECK-NEXT: // %bb.6: // %sw.bb7 ; CHECK-NEXT: add w0, w2, #7 ; CHECK-NEXT: ret ; CHECK-NEXT: .LBB0_7: // %sw.bb1 ; CHECK-NEXT: add w0, w2, #3 ; CHECK-NEXT: ret ; CHECK-NEXT: .LBB0_8: // %sw.bb3 ; CHECK-NEXT: add w0, w2, #4 ; CHECK-NEXT: ret ; CHECK-NEXT: .LBB0_9: // %sw.bb5 ; CHECK-NEXT: add w0, w2, #5 ; CHECK-NEXT: .LBB0_10: // %return ; 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 }