; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 ; RUN: llc < %s -mtriple=m68k-linux -mcpu=M68020 --verify-machineinstrs | FileCheck %s define internal void @select_i32(i32 %self, ptr nonnull %value) { ; CHECK-LABEL: select_i32: ; CHECK: .cfi_startproc ; CHECK-NEXT: ; %bb.0: ; %start ; CHECK-NEXT: suba.l #4, %sp ; CHECK-NEXT: .cfi_def_cfa_offset -8 ; CHECK-NEXT: movem.l %d2, (0,%sp) ; 8-byte Folded Spill ; CHECK-NEXT: cmpi.l #0, (8,%sp) ; CHECK-NEXT: move.w %ccr, %d2 ; CHECK-NEXT: sne %d1 ; CHECK-NEXT: move.l (12,%sp), %d0 ; CHECK-NEXT: move.w %d2, %ccr ; CHECK-NEXT: bne .LBB0_2 ; CHECK-NEXT: ; %bb.1: ; %start ; CHECK-NEXT: and.l #255, %d1 ; CHECK-NEXT: cmpi.l #0, %d1 ; CHECK-NEXT: bne .LBB0_3 ; CHECK-NEXT: .LBB0_2: ; %null ; CHECK-NEXT: suba.l %a0, %a0 ; CHECK-NEXT: move.l %d0, (%a0) ; CHECK-NEXT: .LBB0_3: ; %exit ; CHECK-NEXT: movem.l (0,%sp), %d2 ; 8-byte Folded Reload ; CHECK-NEXT: adda.l #4, %sp ; CHECK-NEXT: rts start: %2 = icmp eq i32 %self, 0 %3 = select i1 %2, i32 0, i32 1 switch i32 %3, label %exit [ i32 0, label %nonnull i32 1, label %null ] nonnull: ; preds = %start store ptr %value, ptr null, align 2 br label %exit null: ; preds = %start store ptr %value, ptr null, align 2 br label %exit exit: ; preds = %nonnull, %null ret void } define internal void @select_i16(i16 %self, ptr nonnull %value) { ; CHECK-LABEL: select_i16: ; CHECK: .cfi_startproc ; CHECK-NEXT: ; %bb.0: ; %start ; CHECK-NEXT: suba.l #4, %sp ; CHECK-NEXT: .cfi_def_cfa_offset -8 ; CHECK-NEXT: movem.l %d2, (0,%sp) ; 8-byte Folded Spill ; CHECK-NEXT: cmpi.w #0, (10,%sp) ; CHECK-NEXT: move.w %ccr, %d2 ; CHECK-NEXT: sne %d1 ; CHECK-NEXT: move.l (12,%sp), %d0 ; CHECK-NEXT: move.w %d2, %ccr ; CHECK-NEXT: bne .LBB1_2 ; CHECK-NEXT: ; %bb.1: ; %start ; CHECK-NEXT: and.l #255, %d1 ; CHECK-NEXT: cmpi.w #0, %d1 ; CHECK-NEXT: bne .LBB1_3 ; CHECK-NEXT: .LBB1_2: ; %null ; CHECK-NEXT: suba.l %a0, %a0 ; CHECK-NEXT: move.l %d0, (%a0) ; CHECK-NEXT: .LBB1_3: ; %exit ; CHECK-NEXT: movem.l (0,%sp), %d2 ; 8-byte Folded Reload ; CHECK-NEXT: adda.l #4, %sp ; CHECK-NEXT: rts start: %2 = icmp eq i16 %self, 0 %3 = select i1 %2, i16 0, i16 1 switch i16 %3, label %exit [ i16 0, label %nonnull i16 1, label %null ] nonnull: ; preds = %start store ptr %value, ptr null, align 2 br label %exit null: ; preds = %start store ptr %value, ptr null, align 2 br label %exit exit: ; preds = %nonnull, %null ret void } define internal void @select_i8(i8 %self, ptr nonnull %value) { ; CHECK-LABEL: select_i8: ; CHECK: .cfi_startproc ; CHECK-NEXT: ; %bb.0: ; %start ; CHECK-NEXT: move.l (8,%sp), %d0 ; CHECK-NEXT: cmpi.b #0, (7,%sp) ; CHECK-NEXT: sne %d1 ; CHECK-NEXT: bne .LBB2_2 ; CHECK-NEXT: ; %bb.1: ; %start ; CHECK-NEXT: cmpi.b #0, %d1 ; CHECK-NEXT: bne .LBB2_3 ; CHECK-NEXT: .LBB2_2: ; %null ; CHECK-NEXT: suba.l %a0, %a0 ; CHECK-NEXT: move.l %d0, (%a0) ; CHECK-NEXT: .LBB2_3: ; %exit ; CHECK-NEXT: rts start: %2 = icmp eq i8 %self, 0 %3 = select i1 %2, i8 0, i8 1 switch i8 %3, label %exit [ i8 0, label %nonnull i8 1, label %null ] nonnull: ; preds = %start store ptr %value, ptr null, align 2 br label %exit null: ; preds = %start store ptr %value, ptr null, align 2 br label %exit exit: ; preds = %nonnull, %null ret void }