# RUN: llc -mtriple powerpc64le-unknown-linux-gnu -mcpu=pwr8 -x mir < %s \ # RUN: -verify-machineinstrs -start-before=ppc-mi-peepholes \ # RUN: -ppc-opt-conditional-trap | FileCheck %s --- name: conditional_trap_opt_reg_implicit_def alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:gprc = IMPLICIT_DEF %1:gprc = IMPLICIT_DEF %2:g8rc = IMPLICIT_DEF %3:g8rc = IMPLICIT_DEF TW 8, %0, %1 TD 8, %2, %3 TWI 24, %0, 0 TDI 24, %2, 0 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_reg_implicit_def # CHECK: # %bb.0: # %entry # CHECK-NEXT: twgt 3, 3 # CHECK-NEXT: tdgt 3, 3 # CHECK-NEXT: twnei 3, 0 # CHECK-NEXT: tdnei 3, 0 # CHECK-NEXT: blr --- name: conditional_trap_opt_int_return alignment: 16 tracksRegLiveness: true body: | bb.0.entry: liveins: $x3 %0:g8rc = COPY $x3 %1:g8rc = LI8 3 %2:g8rc = LI8 0 TD 24, %2, %1 $x3 = COPY %0 BLR8 implicit $lr8, implicit $rm, implicit $x3 ... # CHECK-LABEL: conditional_trap_opt_int_return # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_TW_31 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:gprc = LI 3 %1:gprc = LI 0 TW 31, %1, %0 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TW_31 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_TW_24 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:gprc = LI 3 %1:gprc = LI 0 TW 24, %1, %0 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TW_24 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_no_trap_TW_24 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:gprc = LI 3 %1:gprc = LI 3 TW 24, %1, %0 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_no_trap_TW_24 # CHECK: # %bb.0: # %entry # CHECK-NEXT: blr --- name: conditional_trap_opt_TW_20 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:gprc = LI 3 %1:gprc = LI 3 TW 20, %1, %0 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TW_20 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_no_trap_TW_20 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:gprc = LI 3 %1:gprc = LI 5 TW 20, %1, %0 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_no_trap_TW_20 # CHECK: # %bb.0: # %entry # CHECK-NEXT: blr --- name: conditional_trap_opt_no_trap_TW_16 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:gprc = LI 5 %1:gprc = LI 1 TW 16, %0, %1 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_no_trap_TW_16 # CHECK: # %bb.0: # %entry # CHECK-NEXT: blr --- name: conditional_trap_opt_TW_16 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:gprc = LI 5 %1:gprc = LI 1 TW 16, %1, %0 TW 16, %0, %1 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TW_16 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_TW_8 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:gprc = LI -1 %1:gprc = LI 10 TW 8, %1, %0 TW 8, %0, %1 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TW_8 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_TW_2 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:gprc = LI -1 %1:gprc = LI 2 TW 2, %1, %0 TW 2, %0, %1 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TW_2 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_TW_1 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:gprc = LI -3 %1:gprc = LI 4 TW 1, %1, %0 TW 1, %0, %1 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TW_1 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_TW_4 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:gprc = LI 5 %1:gprc = LI 1 TW 4, %1, %0 TW 4, %1, %1 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TW_4 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_TWI_31 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:gprc = LI 3 TWI 31, %0, 0 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TWI_31 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_TWI_24 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:gprc = LI 3 TWI 24, %0, 0 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TWI_24 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_no_trap_TWI_24 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:gprc = LI 0 TWI 24, %0, 0 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_no_trap_TWI_24 # CHECK: # %bb.0: # %entry # CHECK-NEXT: blr --- name: conditional_trap_opt_TWI_20 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:gprc = LI 3 TWI 20, %0, 3 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TWI_20 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_no_trap_TWI_20 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:gprc = LI 3 TWI 20, %0, 0 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_no_trap_TWI_20 # CHECK: # %bb.0: # %entry # CHECK-NEXT: blr --- name: conditional_trap_opt_no_trap_TWI_16 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:gprc = LI 5 TWI 16, %0, 1 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_no_trap_TWI_16 # CHECK: # %bb.0: # %entry # CHECK-NEXT: blr --- name: conditional_trap_opt_TWI_16 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:gprc = LI 5 %1:gprc = LI 1 TWI 16, %1, 5 TWI 16, %0, 1 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TWI_16 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_TWI_8 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:gprc = LI -1 %1:gprc = LI 10 TWI 8, %1, -1 TWI 8, %0, 10 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TWI_8 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_TWI_2 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:gprc = LI -1 %1:gprc = LI 2 TWI 2, %1, -1 TWI 2, %0, 2 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TWI_2 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_TWI_1 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:gprc = LI -3 %1:gprc = LI 4 TWI 1, %1, -3 TWI 1, %0, 4 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TWI_1 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_TWI_4 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:gprc = LI 5 %1:gprc = LI 1 TWI 4, %1, 5 TWI 4, %1, 1 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TWI_4 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_TD_31 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:g8rc = LI8 3 %1:g8rc = LI8 0 TD 31, %1, %0 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TD_31 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_TD_24 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:g8rc = LI8 3 %1:g8rc = LI8 0 TD 24, %1, %0 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TD_24 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_no_trap_TD_24 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:g8rc = LI8 3 %1:g8rc = LI8 3 TD 24, %1, %0 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_no_trap_TD_24 # CHECK: # %bb.0: # %entry # CHECK-NEXT: blr --- name: conditional_trap_opt_TD_20 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:g8rc = LI8 3 %1:g8rc = LI8 3 TD 20, %1, %0 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TD_20 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_no_trap_TD_20 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:g8rc = LI8 3 %1:g8rc = LI8 5 TD 20, %1, %0 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_no_trap_TD_20 # CHECK: # %bb.0: # %entry # CHECK-NEXT: blr --- name: conditional_trap_opt_no_trap_TD_16 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:g8rc = LI8 5 %1:g8rc = LI8 1 TD 16, %0, %1 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_no_trap_TD_16 # CHECK: # %bb.0: # %entry # CHECK-NEXT: blr --- name: conditional_trap_opt_TD_16 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:g8rc = LI8 5 %1:g8rc = LI8 1 TD 16, %1, %0 TD 16, %0, %1 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TD_16 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_TD_8 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:g8rc = LI8 -1 %1:g8rc = LI8 10 TD 8, %1, %0 TD 8, %0, %1 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TD_8 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_TD_2 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:g8rc = LI8 -1 %1:g8rc = LI8 2 TD 2, %1, %0 TD 2, %0, %1 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TD_2 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_TD_1 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:g8rc = LI8 -3 %1:g8rc = LI8 4 TD 1, %1, %0 TD 1, %0, %1 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TD_1 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_TD_4 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:g8rc = LI8 5 %1:g8rc = LI8 1 TD 4, %1, %0 TD 4, %1, %1 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TD_4 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_TDI_31 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:g8rc = LI8 3 TDI 31, %0, 0 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TDI_31 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_TDI_24 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:g8rc = LI8 3 TDI 24, %0, 0 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TDI_24 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_no_trap_TDI_24 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:g8rc = LI8 0 TDI 24, %0, 0 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_no_trap_TDI_24 # CHECK: # %bb.0: # %entry # CHECK-NEXT: blr --- name: conditional_trap_opt_TDI_20 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:g8rc = LI8 3 TDI 20, %0, 3 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TDI_20 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_no_trap_TDI_20 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:g8rc = LI8 5 TDI 20, %0, 3 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_no_trap_TDI_20 # CHECK: # %bb.0: # %entry # CHECK-NEXT: blr --- name: conditional_trap_opt_no_trap_TDI_16 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:g8rc = LI8 5 TDI 16, %0, 1 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_no_trap_TDI_16 # CHECK: # %bb.0: # %entry # CHECK-NEXT: blr --- name: conditional_trap_opt_TDI_16 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:g8rc = LI8 5 %1:g8rc = LI8 1 TDI 16, %1, 5 TDI 16, %0, 1 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TDI_16 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_TDI_8 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:g8rc = LI8 -1 %1:g8rc = LI8 10 TDI 8, %1, -1 TDI 8, %0, 10 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TDI_8 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_TDI_2 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:g8rc = LI8 -1 %1:g8rc = LI8 2 TDI 2, %1, -1 TDI 2, %0, 2 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TDI_2 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_TDI_1 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:g8rc = LI8 -3 %1:g8rc = LI8 4 TDI 1, %1, -3 TDI 1, %0, 4 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TDI_1 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_TDI_4 alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:g8rc = LI8 5 %1:g8rc = LI8 1 TDI 4, %1, 5 TDI 4, %1, 1 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_TDI_4 # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr --- name: conditional_trap_opt_multiple_traps alignment: 16 tracksRegLiveness: true body: | bb.0.entry: %0:gprc = LI 5 %1:gprc = LI 1 %2:g8rc = LI8 -1 %3:g8rc = LI8 0 TWI 31, %1, 5 TDI 31, %3, 0 TW 31, %0, %1 TD 31, %2, %2 BLR8 implicit $lr8, implicit $rm ... # CHECK-LABEL: conditional_trap_opt_multiple_traps # CHECK: # %bb.0: # %entry # CHECK-NEXT: trap # CHECK-NOT: blr