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