# 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