1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 2; RUN: llc < %s -mtriple=m68k-linux -mcpu=M68020 --verify-machineinstrs | FileCheck %s 3 4define internal void @select_i32(i32 %self, ptr nonnull %value) { 5; CHECK-LABEL: select_i32: 6; CHECK: .cfi_startproc 7; CHECK-NEXT: ; %bb.0: ; %start 8; CHECK-NEXT: suba.l #4, %sp 9; CHECK-NEXT: .cfi_def_cfa_offset -8 10; CHECK-NEXT: movem.l %d2, (0,%sp) ; 8-byte Folded Spill 11; CHECK-NEXT: cmpi.l #0, (8,%sp) 12; CHECK-NEXT: move.w %ccr, %d2 13; CHECK-NEXT: sne %d1 14; CHECK-NEXT: move.l (12,%sp), %d0 15; CHECK-NEXT: move.w %d2, %ccr 16; CHECK-NEXT: bne .LBB0_2 17; CHECK-NEXT: ; %bb.1: ; %start 18; CHECK-NEXT: and.l #255, %d1 19; CHECK-NEXT: cmpi.l #0, %d1 20; CHECK-NEXT: bne .LBB0_3 21; CHECK-NEXT: .LBB0_2: ; %null 22; CHECK-NEXT: suba.l %a0, %a0 23; CHECK-NEXT: move.l %d0, (%a0) 24; CHECK-NEXT: .LBB0_3: ; %exit 25; CHECK-NEXT: movem.l (0,%sp), %d2 ; 8-byte Folded Reload 26; CHECK-NEXT: adda.l #4, %sp 27; CHECK-NEXT: rts 28start: 29 %2 = icmp eq i32 %self, 0 30 %3 = select i1 %2, i32 0, i32 1 31 switch i32 %3, label %exit [ 32 i32 0, label %nonnull 33 i32 1, label %null 34 ] 35 36nonnull: ; preds = %start 37 store ptr %value, ptr null, align 2 38 br label %exit 39 40null: ; preds = %start 41 store ptr %value, ptr null, align 2 42 br label %exit 43 44exit: ; preds = %nonnull, %null 45 ret void 46} 47 48define internal void @select_i16(i16 %self, ptr nonnull %value) { 49; CHECK-LABEL: select_i16: 50; CHECK: .cfi_startproc 51; CHECK-NEXT: ; %bb.0: ; %start 52; CHECK-NEXT: suba.l #4, %sp 53; CHECK-NEXT: .cfi_def_cfa_offset -8 54; CHECK-NEXT: movem.l %d2, (0,%sp) ; 8-byte Folded Spill 55; CHECK-NEXT: cmpi.w #0, (10,%sp) 56; CHECK-NEXT: move.w %ccr, %d2 57; CHECK-NEXT: sne %d1 58; CHECK-NEXT: move.l (12,%sp), %d0 59; CHECK-NEXT: move.w %d2, %ccr 60; CHECK-NEXT: bne .LBB1_2 61; CHECK-NEXT: ; %bb.1: ; %start 62; CHECK-NEXT: and.l #255, %d1 63; CHECK-NEXT: cmpi.w #0, %d1 64; CHECK-NEXT: bne .LBB1_3 65; CHECK-NEXT: .LBB1_2: ; %null 66; CHECK-NEXT: suba.l %a0, %a0 67; CHECK-NEXT: move.l %d0, (%a0) 68; CHECK-NEXT: .LBB1_3: ; %exit 69; CHECK-NEXT: movem.l (0,%sp), %d2 ; 8-byte Folded Reload 70; CHECK-NEXT: adda.l #4, %sp 71; CHECK-NEXT: rts 72start: 73 %2 = icmp eq i16 %self, 0 74 %3 = select i1 %2, i16 0, i16 1 75 switch i16 %3, label %exit [ 76 i16 0, label %nonnull 77 i16 1, label %null 78 ] 79 80nonnull: ; preds = %start 81 store ptr %value, ptr null, align 2 82 br label %exit 83 84null: ; preds = %start 85 store ptr %value, ptr null, align 2 86 br label %exit 87 88exit: ; preds = %nonnull, %null 89 ret void 90} 91 92define internal void @select_i8(i8 %self, ptr nonnull %value) { 93; CHECK-LABEL: select_i8: 94; CHECK: .cfi_startproc 95; CHECK-NEXT: ; %bb.0: ; %start 96; CHECK-NEXT: move.l (8,%sp), %d0 97; CHECK-NEXT: cmpi.b #0, (7,%sp) 98; CHECK-NEXT: sne %d1 99; CHECK-NEXT: bne .LBB2_2 100; CHECK-NEXT: ; %bb.1: ; %start 101; CHECK-NEXT: cmpi.b #0, %d1 102; CHECK-NEXT: bne .LBB2_3 103; CHECK-NEXT: .LBB2_2: ; %null 104; CHECK-NEXT: suba.l %a0, %a0 105; CHECK-NEXT: move.l %d0, (%a0) 106; CHECK-NEXT: .LBB2_3: ; %exit 107; CHECK-NEXT: rts 108start: 109 %2 = icmp eq i8 %self, 0 110 %3 = select i1 %2, i8 0, i8 1 111 switch i8 %3, label %exit [ 112 i8 0, label %nonnull 113 i8 1, label %null 114 ] 115 116nonnull: ; preds = %start 117 store ptr %value, ptr null, align 2 118 br label %exit 119 120null: ; preds = %start 121 store ptr %value, ptr null, align 2 122 br label %exit 123 124exit: ; preds = %nonnull, %null 125 ret void 126} 127