1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=aarch64 -o - | FileCheck %s 3 4define void @foo(i32 %i) nounwind { 5; CHECK-LABEL: foo: 6; CHECK: // %bb.0: // %entry 7; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill 8; CHECK-NEXT: cmp w0, #7 9; CHECK-NEXT: b.eq .LBB0_3 10; CHECK-NEXT: // %bb.1: // %entry 11; CHECK-NEXT: cmp w0, #5 12; CHECK-NEXT: b.ne .LBB0_4 13; CHECK-NEXT: // %bb.2: // %if.then 14; CHECK-NEXT: bl bar 15; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 16; CHECK-NEXT: b bar 17; CHECK-NEXT: .LBB0_3: // %if.then2 18; CHECK-NEXT: bl bar 19; CHECK-NEXT: .LBB0_4: // %if.end3 20; CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload 21; CHECK-NEXT: b bar 22entry: 23 switch i32 %i, label %if.end3 [ 24 i32 5, label %if.then 25 i32 7, label %if.then2 26 ] 27 28if.then: 29 tail call void @bar() #0 30 br label %if.end3 31 32if.then2: 33 tail call void @bar() #0 34 br label %if.end3 35 36if.end3: 37 tail call void @bar() #0 38 ret void 39} 40 41define void @foo_tail(i1 %i) nounwind { 42; CHECK-LABEL: foo_tail: 43; CHECK: // %bb.0: // %entry 44; CHECK-NEXT: tbz w0, #0, .LBB1_2 45; CHECK-NEXT: // %bb.1: // %if.then 46; CHECK-NEXT: b bar 47; CHECK-NEXT: .LBB1_2: // %if.else 48; CHECK-NEXT: b bar 49entry: 50 br i1 %i, label %if.then, label %if.else 51 52if.then: 53 tail call void @bar() #0 54 br label %if.end 55 56if.else: 57 tail call void @bar() #0 58 br label %if.end 59 60if.end: 61 ret void 62} 63 64declare void @bar() 65 66attributes #0 = { nomerge } 67