blob: 08fc47d9480ce9a1c77be7afd2bbade01987d041 [file] [edit]
# RUN: llc -mtriple=aarch64 -o /dev/null -run-pass=register-coalescer -aarch64-enable-subreg-liveness-tracking -debug-only=regalloc %s 2>&1 | FileCheck %s --check-prefix=CHECK-DBG
# RUN: llc -mtriple=aarch64 -verify-machineinstrs -o - -run-pass=register-coalescer -aarch64-enable-subreg-liveness-tracking %s | FileCheck %s --check-prefix=CHECK
# REQUIRES: asserts
# CHECK-DBG: ********** REGISTER COALESCER **********
# CHECK-DBG: ********** Function: test
# CHECK-DBG: ********** JOINING INTERVALS ***********
# CHECK-DBG: ********** INTERVALS **********
# CHECK-DBG: %0 [16r,32r:0) 0@16r weight:0.000000e+00
# CHECK-DBG: %3 [48r,112r:0) 0@48r L0000000000000040 [48r,112r:0) 0@48r weight:0.000000e+00
# CHECK-DBG: %4 [80r,112e:1)[112e,112d:0) 0@112e 1@80r L0000000000000080 [112e,112d:0) 0@112e L0000000000000040 [80r,112e:1)[112e,112d:0) 0@112e 1@80r weight:0.000000e+00
# CHECK-DBG: %5 [32r,112r:1)[112r,112d:0) 0@112r 1@32r weight:0.000000e+00
---
name: test
tracksRegLiveness: true
fixedStack: []
stack:
- { id: 0, name: '', type: default, offset: 0, size: 65, alignment: 16,
stack-id: default }
body: |
bb.0.entry:
; CHECK-LABEL: name: test
; CHECK: [[ADDXri:%[0-9]+]]:gpr64sp = ADDXri %stack.0, 0, 0
; CHECK-NEXT: [[ADDXri1:%[0-9]+]]:gpr64common = nuw ADDXri [[ADDXri]], 64, 0
; CHECK-NEXT: undef [[MOVi32imm:%[0-9]+]].sub_32:gpr64 = MOVi32imm 64
; CHECK-NEXT: undef [[MOVi32imm1:%[0-9]+]].sub_32:gpr64 = MOVi32imm 64
; CHECK-NEXT: dead [[ADDXri1]]:gpr64common, dead early-clobber [[MOVi32imm1]]:gpr64 = MOPSMemorySetPseudo [[ADDXri1]], [[MOVi32imm1]], [[MOVi32imm]], implicit-def dead $nzcv
; CHECK-NEXT: RET_ReallyLR
%1:gpr64sp = ADDXri %stack.0, 0, 0
%2:gpr64common = nuw ADDXri killed %1, 64, 0
%3:gpr32 = MOVi32imm 64
%4:gpr64 = SUBREG_TO_REG 0, killed %3, %subreg.sub_32
%6:gpr64 = COPY %4
%5:gpr64common = COPY killed %2
dead %5:gpr64common, dead early-clobber %6:gpr64 = MOPSMemorySetPseudo %5, %6, %4, implicit-def dead $nzcv
RET_ReallyLR
...
# CHECK-DBG: ********** REGISTER COALESCER **********
# CHECK-DBG: ********** Function: reproducer
# CHECK-DBG: ********** JOINING INTERVALS ***********
# CHECK-DBG: ********** INTERVALS **********
# CHECK-DBG: %1 [32r,48B:2)[48B,320r:0)[320r,368B:1) 0@48B-phi 1@320r 2@32r
# CHECK-DBG-SAME: weight:0.000000e+00
# CHECK-DBG: %3 [80r,160B:2)[240r,272B:1)[288r,304B:0)[304B,320r:3) 0@288r 1@240r 2@80r 3@304B-phi
# CHECK-DBG-SAME: L0000000000000080 [288r,304B:0)[304B,320r:3) 0@288r 1@x 2@x 3@304B-phi
# CHECK-DBG-SAME: L0000000000000040 [80r,160B:2)[240r,272B:1)[288r,304B:0)[304B,320r:3) 0@288r 1@240r 2@80r 3@304B-phi
# CHECK-DBG-SAME: weight:0.000000e+00
---
name: reproducer
tracksRegLiveness: true
body: |
bb.0:
%0:gpr32 = MOVi32imm 1
%1:gpr64 = IMPLICIT_DEF
bb.1:
bb.2:
%3:gpr64all = SUBREG_TO_REG 0, %0, %subreg.sub_32
bb.3:
$nzcv = IMPLICIT_DEF
%4:gpr64 = COPY killed %3
Bcc 1, %bb.7, implicit killed $nzcv
bb.4:
$nzcv = IMPLICIT_DEF
Bcc 1, %bb.6, implicit killed $nzcv
bb.5:
%5:gpr64all = SUBREG_TO_REG 0, %0, %subreg.sub_32
%4:gpr64 = COPY killed %5
B %bb.7
bb.6:
%4:gpr64 = COPY $xzr
bb.7:
%7:gpr64 = ADDXrs killed %1, killed %4, 1
%1:gpr64 = COPY killed %7
B %bb.1
...
# CHECK-DBG: ********** REGISTER COALESCER **********
# CHECK-DBG: ********** Function: reproducer2
# CHECK-DBG: ********** JOINING INTERVALS ***********
# CHECK-DBG: ********** INTERVALS **********
# CHECK-DBG: %1 [32r,48B:2)[48B,304r:0)[304r,352B:1) 0@48B-phi 1@304r 2@32r
# CHECK-DBG-SAME: weight:0.000000e+00
# CHECK-DBG: %3 [80r,160B:2)[224r,256B:1)[272r,288B:0)[288B,304r:3) 0@272r 1@224r 2@80r 3@288B-phi
# CHECK-DBG-SAME: L0000000000000080 [224r,256B:1)[272r,288B:0)[288B,304r:3) 0@272r 1@224r 2@x 3@288B-phi
# CHECK-DBG-SAME: L0000000000000040 [80r,160B:2)[224r,256B:1)[272r,288B:0)[288B,304r:3) 0@272r 1@224r 2@80r 3@288B-phi
# CHECK-DBG-SAME: weight:0.000000e+00
---
name: reproducer2
tracksRegLiveness: true
body: |
bb.0:
%0:gpr32 = MOVi32imm 1
%1:gpr64 = IMPLICIT_DEF
bb.1:
bb.2:
%3:gpr64all = SUBREG_TO_REG 0, %0, %subreg.sub_32
bb.3:
$nzcv = IMPLICIT_DEF
%4:gpr64 = COPY killed %3
Bcc 1, %bb.7, implicit killed $nzcv
bb.4:
$nzcv = IMPLICIT_DEF
Bcc 1, %bb.6, implicit killed $nzcv
bb.5:
%4:gpr64 = IMPLICIT_DEF
B %bb.7
bb.6:
%4:gpr64 = COPY $xzr
bb.7:
%5:gpr64 = ADDXrs killed %1, killed %4, 1
%1:gpr64 = COPY killed %5
B %bb.1
...