1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 2; RUN: llc < %s -mtriple=powerpc -o - | FileCheck %s 3 4define void @foo(i32 %i) nounwind { 5; CHECK-LABEL: foo: 6; CHECK: # %bb.0: # %entry 7; CHECK-NEXT: mflr 0 8; CHECK-NEXT: stwu 1, -16(1) 9; CHECK-NEXT: cmplwi 3, 7 10; CHECK-NEXT: stw 0, 20(1) 11; CHECK-NEXT: beq 0, .LBB0_3 12; CHECK-NEXT: # %bb.1: # %entry 13; CHECK-NEXT: cmplwi 3, 5 14; CHECK-NEXT: bne 0, .LBB0_4 15; CHECK-NEXT: # %bb.2: # %if.then 16; CHECK-NEXT: bl bar 17; CHECK-NEXT: b .LBB0_4 18; CHECK-NEXT: .LBB0_3: # %if.then2 19; CHECK-NEXT: bl bar 20; CHECK-NEXT: .LBB0_4: # %if.end3 21; CHECK-NEXT: bl bar 22; CHECK-NEXT: lwz 0, 20(1) 23; CHECK-NEXT: addi 1, 1, 16 24; CHECK-NEXT: mtlr 0 25; CHECK-NEXT: blr 26entry: 27 switch i32 %i, label %if.end3 [ 28 i32 5, label %if.then 29 i32 7, label %if.then2 30 ] 31 32if.then: 33 tail call void @bar() #0 34 br label %if.end3 35 36if.then2: 37 tail call void @bar() #0 38 br label %if.end3 39 40if.end3: 41 tail call void @bar() #0 42 ret void 43} 44 45define void @foo_tail(i1 %i) nounwind { 46; CHECK-LABEL: foo_tail: 47; CHECK: # %bb.0: # %entry 48; CHECK-NEXT: mflr 0 49; CHECK-NEXT: stwu 1, -16(1) 50; CHECK-NEXT: andi. 3, 3, 1 51; CHECK-NEXT: stw 0, 20(1) 52; CHECK-NEXT: bc 4, 1, .LBB1_2 53; CHECK-NEXT: # %bb.1: # %if.then 54; CHECK-NEXT: bl bar 55; CHECK-NEXT: b .LBB1_3 56; CHECK-NEXT: .LBB1_2: # %if.else 57; CHECK-NEXT: bl bar 58; CHECK-NEXT: .LBB1_3: # %if.end 59; CHECK-NEXT: lwz 0, 20(1) 60; CHECK-NEXT: addi 1, 1, 16 61; CHECK-NEXT: mtlr 0 62; CHECK-NEXT: blr 63entry: 64 br i1 %i, label %if.then, label %if.else 65 66if.then: 67 tail call void @bar() #0 68 br label %if.end 69 70if.else: 71 tail call void @bar() #0 72 br label %if.end 73 74if.end: 75 ret void 76} 77 78declare void @bar() 79 80attributes #0 = { nomerge } 81