blob: ce1f0543c4deff41ce966710db7ced2da7be27d0 [file] [edit]
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6
# RUN: llc -mtriple=aarch64 -mattr=+sve,+sme -run-pass=aarch64-ptrue-coalesce -aarch64-enable-ptrue-coalescing -verify-machineinstrs -o - %s | FileCheck %s --check-prefixes=CHECK,ENABLED
# RUN: llc -mtriple=aarch64 -mattr=+sve,+sme -passes=aarch64-ptrue-coalesce -aarch64-enable-ptrue-coalescing -o - %s | FileCheck %s --check-prefixes=CHECK,ENABLED
# RUN: llc -mtriple=aarch64 -mattr=+sve,+sme -passes=aarch64-ptrue-coalesce -aarch64-enable-ptrue-coalescing=false -verify-machineinstrs -o - %s | FileCheck %s --check-prefixes=CHECK,DISABLED
---
name: ptrue_b_replaces_ptrue_h_for_h_user
alignment: 2
tracksRegLiveness: true
registers:
- { id: 0, class: ppr_3b }
- { id: 1, class: ppr_3b }
- { id: 2, class: zpr }
- { id: 3, class: zpr }
- { id: 4, class: ppr }
- { id: 5, class: ppr }
liveins:
- { reg: '$z0', virtual-reg: '%2' }
- { reg: '$z1', virtual-reg: '%3' }
body: |
bb.0:
liveins: $z0, $z1
; ENABLED-LABEL: name: ptrue_b_replaces_ptrue_h_for_h_user
; ENABLED: liveins: $z0, $z1
; ENABLED-NEXT: {{ $}}
; ENABLED-NEXT: [[COPY:%[0-9]+]]:zpr = COPY $z0
; ENABLED-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z1
; ENABLED-NEXT: [[PTRUE_B:%[0-9]+]]:ppr_3b = PTRUE_B 31, implicit $vg
; ENABLED-NEXT: [[CMPEQ_PPzZZ_H:%[0-9]+]]:ppr = CMPEQ_PPzZZ_H [[PTRUE_B]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; ENABLED-NEXT: [[CMPEQ_PPzZZ_B:%[0-9]+]]:ppr = CMPEQ_PPzZZ_B [[PTRUE_B]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; ENABLED-NEXT: RET_ReallyLR
;
; DISABLED-LABEL: name: ptrue_b_replaces_ptrue_h_for_h_user
; DISABLED: liveins: $z0, $z1
; DISABLED-NEXT: {{ $}}
; DISABLED-NEXT: [[COPY:%[0-9]+]]:zpr = COPY $z0
; DISABLED-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z1
; DISABLED-NEXT: [[PTRUE_B:%[0-9]+]]:ppr_3b = PTRUE_B 31, implicit $vg
; DISABLED-NEXT: [[PTRUE_H:%[0-9]+]]:ppr_3b = PTRUE_H 31, implicit $vg
; DISABLED-NEXT: [[CMPEQ_PPzZZ_H:%[0-9]+]]:ppr = CMPEQ_PPzZZ_H [[PTRUE_H]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; DISABLED-NEXT: [[CMPEQ_PPzZZ_B:%[0-9]+]]:ppr = CMPEQ_PPzZZ_B [[PTRUE_B]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; DISABLED-NEXT: RET_ReallyLR
%2:zpr = COPY $z0
%3:zpr = COPY $z1
%0:ppr_3b = PTRUE_B 31, implicit $vg
%1:ppr_3b = PTRUE_H 31, implicit $vg
%4:ppr = CMPEQ_PPzZZ_H %1, %2, %3, implicit-def dead $nzcv
%5:ppr = CMPEQ_PPzZZ_B %0, %2, %3, implicit-def dead $nzcv
RET_ReallyLR
...
---
name: keep_ptrue_h_for_b_user
alignment: 2
tracksRegLiveness: true
registers:
- { id: 0, class: ppr_3b }
- { id: 1, class: ppr_3b }
- { id: 2, class: zpr }
- { id: 3, class: zpr }
- { id: 4, class: ppr }
- { id: 5, class: ppr }
liveins:
- { reg: '$z0', virtual-reg: '%2' }
- { reg: '$z1', virtual-reg: '%3' }
body: |
bb.0:
liveins: $z0, $z1
; ENABLED-LABEL: name: keep_ptrue_h_for_b_user
; ENABLED: liveins: $z0, $z1
; ENABLED-NEXT: {{ $}}
; ENABLED-NEXT: [[COPY:%[0-9]+]]:zpr = COPY $z0
; ENABLED-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z1
; ENABLED-NEXT: [[PTRUE_H:%[0-9]+]]:ppr_3b = PTRUE_H 31, implicit $vg
; ENABLED-NEXT: [[CMPEQ_PPzZZ_B:%[0-9]+]]:ppr = CMPEQ_PPzZZ_B [[PTRUE_H]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; ENABLED-NEXT: [[CMPEQ_PPzZZ_H:%[0-9]+]]:ppr = CMPEQ_PPzZZ_H [[PTRUE_H]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; ENABLED-NEXT: RET_ReallyLR
;
; DISABLED-LABEL: name: keep_ptrue_h_for_b_user
; DISABLED: liveins: $z0, $z1
; DISABLED-NEXT: {{ $}}
; DISABLED-NEXT: [[COPY:%[0-9]+]]:zpr = COPY $z0
; DISABLED-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z1
; DISABLED-NEXT: [[PTRUE_B:%[0-9]+]]:ppr_3b = PTRUE_B 31, implicit $vg
; DISABLED-NEXT: [[PTRUE_H:%[0-9]+]]:ppr_3b = PTRUE_H 31, implicit $vg
; DISABLED-NEXT: [[CMPEQ_PPzZZ_B:%[0-9]+]]:ppr = CMPEQ_PPzZZ_B [[PTRUE_H]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; DISABLED-NEXT: [[CMPEQ_PPzZZ_H:%[0-9]+]]:ppr = CMPEQ_PPzZZ_H [[PTRUE_B]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; DISABLED-NEXT: RET_ReallyLR
%2:zpr = COPY $z0
%3:zpr = COPY $z1
%0:ppr_3b = PTRUE_B 31, implicit $vg
%1:ppr_3b = PTRUE_H 31, implicit $vg
%4:ppr = CMPEQ_PPzZZ_B %1, %2, %3, implicit-def dead $nzcv
%5:ppr = CMPEQ_PPzZZ_H %0, %2, %3, implicit-def dead $nzcv
RET_ReallyLR
...
---
name: ptrue_b_replaces_and_updates_ptrue_h
alignment: 2
tracksRegLiveness: true
registers:
- { id: 0, class: ppr_3b }
- { id: 1, class: ppr_3b }
- { id: 2, class: zpr }
- { id: 3, class: zpr }
- { id: 4, class: ppr }
- { id: 5, class: ppr }
liveins:
- { reg: '$z0', virtual-reg: '%2' }
- { reg: '$z1', virtual-reg: '%3' }
body: |
bb.0:
liveins: $z0, $z1
; ENABLED-LABEL: name: ptrue_b_replaces_and_updates_ptrue_h
; ENABLED: liveins: $z0, $z1
; ENABLED-NEXT: {{ $}}
; ENABLED-NEXT: [[COPY:%[0-9]+]]:zpr = COPY $z0
; ENABLED-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z1
; ENABLED-NEXT: [[PTRUE_B:%[0-9]+]]:ppr_3b = PTRUE_B 31, implicit $vg
; ENABLED-NEXT: [[CMPEQ_PPzZZ_H:%[0-9]+]]:ppr = CMPEQ_PPzZZ_H [[PTRUE_B]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; ENABLED-NEXT: [[CMPEQ_PPzZZ_B:%[0-9]+]]:ppr = CMPEQ_PPzZZ_B [[PTRUE_B]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; ENABLED-NEXT: RET_ReallyLR
;
; DISABLED-LABEL: name: ptrue_b_replaces_and_updates_ptrue_h
; DISABLED: liveins: $z0, $z1
; DISABLED-NEXT: {{ $}}
; DISABLED-NEXT: [[COPY:%[0-9]+]]:zpr = COPY $z0
; DISABLED-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z1
; DISABLED-NEXT: [[PTRUE_H:%[0-9]+]]:ppr_3b = PTRUE_H 31, implicit $vg
; DISABLED-NEXT: [[CMPEQ_PPzZZ_H:%[0-9]+]]:ppr = CMPEQ_PPzZZ_H [[PTRUE_H]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; DISABLED-NEXT: [[PTRUE_B:%[0-9]+]]:ppr_3b = PTRUE_B 31, implicit $vg
; DISABLED-NEXT: [[CMPEQ_PPzZZ_B:%[0-9]+]]:ppr = CMPEQ_PPzZZ_B [[PTRUE_B]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; DISABLED-NEXT: RET_ReallyLR
%2:zpr = COPY $z0
%3:zpr = COPY $z1
%0:ppr_3b = PTRUE_H 31, implicit $vg
%4:ppr = CMPEQ_PPzZZ_H %0, %2, %3, implicit-def dead $nzcv
%1:ppr_3b = PTRUE_B 31, implicit $vg
%5:ppr = CMPEQ_PPzZZ_B %1, %2, %3, implicit-def dead $nzcv
RET_ReallyLR
...
---
name: ptrue_b_replaces_ptrue_h_in_dominated_block
alignment: 2
tracksRegLiveness: true
registers:
- { id: 0, class: ppr_3b }
- { id: 1, class: ppr_3b }
- { id: 2, class: zpr }
- { id: 3, class: zpr }
- { id: 4, class: ppr }
- { id: 5, class: ppr }
liveins:
- { reg: '$z0', virtual-reg: '%2' }
- { reg: '$z1', virtual-reg: '%3' }
body: |
; ENABLED-LABEL: name: ptrue_b_replaces_ptrue_h_in_dominated_block
; ENABLED: bb.0:
; ENABLED-NEXT: successors: %bb.1(0x80000000)
; ENABLED-NEXT: liveins: $z0, $z1
; ENABLED-NEXT: {{ $}}
; ENABLED-NEXT: [[COPY:%[0-9]+]]:zpr = COPY $z0
; ENABLED-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z1
; ENABLED-NEXT: [[PTRUE_B:%[0-9]+]]:ppr_3b = PTRUE_B 31, implicit $vg
; ENABLED-NEXT: [[CMPEQ_PPzZZ_B:%[0-9]+]]:ppr = CMPEQ_PPzZZ_B [[PTRUE_B]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; ENABLED-NEXT: B %bb.1
; ENABLED-NEXT: {{ $}}
; ENABLED-NEXT: bb.1:
; ENABLED-NEXT: [[CMPEQ_PPzZZ_H:%[0-9]+]]:ppr = CMPEQ_PPzZZ_H [[PTRUE_B]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; ENABLED-NEXT: RET_ReallyLR
;
; DISABLED-LABEL: name: ptrue_b_replaces_ptrue_h_in_dominated_block
; DISABLED: bb.0:
; DISABLED-NEXT: successors: %bb.1(0x80000000)
; DISABLED-NEXT: liveins: $z0, $z1
; DISABLED-NEXT: {{ $}}
; DISABLED-NEXT: [[COPY:%[0-9]+]]:zpr = COPY $z0
; DISABLED-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z1
; DISABLED-NEXT: [[PTRUE_B:%[0-9]+]]:ppr_3b = PTRUE_B 31, implicit $vg
; DISABLED-NEXT: [[CMPEQ_PPzZZ_B:%[0-9]+]]:ppr = CMPEQ_PPzZZ_B [[PTRUE_B]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; DISABLED-NEXT: B %bb.1
; DISABLED-NEXT: {{ $}}
; DISABLED-NEXT: bb.1:
; DISABLED-NEXT: [[PTRUE_H:%[0-9]+]]:ppr_3b = PTRUE_H 31, implicit $vg
; DISABLED-NEXT: [[CMPEQ_PPzZZ_H:%[0-9]+]]:ppr = CMPEQ_PPzZZ_H [[PTRUE_H]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; DISABLED-NEXT: RET_ReallyLR
bb.0:
successors: %bb.1
liveins: $z0, $z1
%2:zpr = COPY $z0
%3:zpr = COPY $z1
%0:ppr_3b = PTRUE_B 31, implicit $vg
%5:ppr = CMPEQ_PPzZZ_B %0, %2, %3, implicit-def dead $nzcv
B %bb.1
bb.1:
%1:ppr_3b = PTRUE_H 31, implicit $vg
%4:ppr = CMPEQ_PPzZZ_H %1, %2, %3, implicit-def dead $nzcv
RET_ReallyLR
...
---
name: keep_ptrue_h_when_b_user_would_observe_extra_lanes
alignment: 2
tracksRegLiveness: true
registers:
- { id: 0, class: ppr_3b }
- { id: 1, class: ppr_3b }
- { id: 2, class: zpr }
- { id: 3, class: zpr }
- { id: 4, class: ppr }
- { id: 5, class: ppr }
liveins:
- { reg: '$z0', virtual-reg: '%2' }
- { reg: '$z1', virtual-reg: '%3' }
body: |
bb.0:
liveins: $z0, $z1
; CHECK-LABEL: name: keep_ptrue_h_when_b_user_would_observe_extra_lanes
; CHECK: liveins: $z0, $z1
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: [[COPY:%[0-9]+]]:zpr = COPY $z0
; CHECK-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z1
; CHECK-NEXT: [[PTRUE_B:%[0-9]+]]:ppr_3b = PTRUE_B 31, implicit $vg
; CHECK-NEXT: [[CMPEQ_PPzZZ_B:%[0-9]+]]:ppr = CMPEQ_PPzZZ_B [[PTRUE_B]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; CHECK-NEXT: [[PTRUE_H:%[0-9]+]]:ppr_3b = PTRUE_H 31, implicit $vg
; CHECK-NEXT: [[CMPEQ_PPzZZ_B1:%[0-9]+]]:ppr = CMPEQ_PPzZZ_B [[PTRUE_H]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; CHECK-NEXT: RET_ReallyLR
%2:zpr = COPY $z0
%3:zpr = COPY $z1
%0:ppr_3b = PTRUE_B 31, implicit $vg
%4:ppr = CMPEQ_PPzZZ_B %0, %2, %3, implicit-def dead $nzcv
%1:ppr_3b = PTRUE_H 31, implicit $vg
%5:ppr = CMPEQ_PPzZZ_B %1, %2, %3, implicit-def dead $nzcv
RET_ReallyLR
...
---
name: keep_ptrue_s_when_d_user_cannot_be_narrowed
alignment: 2
tracksRegLiveness: true
registers:
- { id: 0, class: ppr_3b }
- { id: 1, class: ppr_3b }
- { id: 2, class: zpr }
- { id: 3, class: zpr }
- { id: 4, class: ppr }
- { id: 5, class: ppr }
- { id: 6, class: zpr }
liveins:
- { reg: '$z0', virtual-reg: '%2' }
- { reg: '$z1', virtual-reg: '%3' }
body: |
bb.0:
liveins: $z0, $z1
; CHECK-LABEL: name: keep_ptrue_s_when_d_user_cannot_be_narrowed
; CHECK: liveins: $z0, $z1
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: [[COPY:%[0-9]+]]:zpr = COPY $z0
; CHECK-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z1
; CHECK-NEXT: [[PTRUE_D:%[0-9]+]]:ppr_3b = PTRUE_D 31, implicit $vg
; CHECK-NEXT: [[CMPEQ_PPzZZ_H:%[0-9]+]]:ppr = CMPEQ_PPzZZ_H [[PTRUE_D]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; CHECK-NEXT: [[PTRUE_S:%[0-9]+]]:ppr_3b = PTRUE_S 31, implicit $vg
; CHECK-NEXT: [[DEF:%[0-9]+]]:zpr = IMPLICIT_DEF
; CHECK-NEXT: [[CMPEQ_PPzZZ_S:%[0-9]+]]:ppr = CMPEQ_PPzZZ_S [[PTRUE_S]], [[DEF]], [[COPY]], implicit-def dead $nzcv
; CHECK-NEXT: RET_ReallyLR
%2:zpr = COPY $z0
%3:zpr = COPY $z1
%0:ppr_3b = PTRUE_D 31, implicit $vg
%4:ppr = CMPEQ_PPzZZ_H %0, %2, %3, implicit-def dead $nzcv
%1:ppr_3b = PTRUE_S 31, implicit $vg
%6:zpr = IMPLICIT_DEF
%5:ppr = CMPEQ_PPzZZ_S %1, %6, %2, implicit-def dead $nzcv
RET_ReallyLR
...
---
name: keep_ptrue_h_when_candidate_does_not_dominate
alignment: 2
tracksRegLiveness: true
registers:
- { id: 0, class: ppr_3b }
- { id: 1, class: ppr_3b }
- { id: 2, class: zpr }
- { id: 3, class: zpr }
- { id: 4, class: ppr }
- { id: 5, class: ppr }
- { id: 6, class: gpr32 }
liveins:
- { reg: '$z0', virtual-reg: '%2' }
- { reg: '$z1', virtual-reg: '%3' }
- { reg: '$w0', virtual-reg: '%6' }
body: |
; CHECK-LABEL: name: keep_ptrue_h_when_candidate_does_not_dominate
; CHECK: bb.0:
; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)
; CHECK-NEXT: liveins: $z0, $z1, $w0
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: [[COPY:%[0-9]+]]:zpr = COPY $z0
; CHECK-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z1
; CHECK-NEXT: [[COPY2:%[0-9]+]]:gpr32 = COPY $w0
; CHECK-NEXT: CBZW [[COPY2]], %bb.2
; CHECK-NEXT: B %bb.1
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: bb.1:
; CHECK-NEXT: successors: %bb.2(0x80000000)
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: [[PTRUE_B:%[0-9]+]]:ppr_3b = PTRUE_B 31, implicit $vg
; CHECK-NEXT: [[CMPEQ_PPzZZ_B:%[0-9]+]]:ppr = CMPEQ_PPzZZ_B [[PTRUE_B]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; CHECK-NEXT: B %bb.2
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: bb.2:
; CHECK-NEXT: [[PTRUE_H:%[0-9]+]]:ppr_3b = PTRUE_H 31, implicit $vg
; CHECK-NEXT: [[CMPEQ_PPzZZ_H:%[0-9]+]]:ppr = CMPEQ_PPzZZ_H [[PTRUE_H]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; CHECK-NEXT: RET_ReallyLR
bb.0:
successors: %bb.2, %bb.1
liveins: $z0, $z1, $w0
%2:zpr = COPY $z0
%3:zpr = COPY $z1
%6:gpr32 = COPY $w0
CBZW %6, %bb.2
B %bb.1
bb.1:
successors: %bb.2
%0:ppr_3b = PTRUE_B 31, implicit $vg
%5:ppr = CMPEQ_PPzZZ_B %0, %2, %3, implicit-def dead $nzcv
B %bb.2
bb.2:
%1:ppr_3b = PTRUE_H 31, implicit $vg
%4:ppr = CMPEQ_PPzZZ_H %1, %2, %3, implicit-def dead $nzcv
RET_ReallyLR
...
---
name: ptrue_s_replaces_ptrue_d_for_d_user
alignment: 2
tracksRegLiveness: true
registers:
- { id: 0, class: ppr_3b }
- { id: 1, class: ppr_3b }
- { id: 2, class: zpr }
- { id: 3, class: zpr }
- { id: 4, class: ppr }
- { id: 5, class: ppr }
liveins:
- { reg: '$z0', virtual-reg: '%2' }
- { reg: '$z1', virtual-reg: '%3' }
body: |
bb.0:
liveins: $z0, $z1
; ENABLED-LABEL: name: ptrue_s_replaces_ptrue_d_for_d_user
; ENABLED: liveins: $z0, $z1
; ENABLED-NEXT: {{ $}}
; ENABLED-NEXT: [[COPY:%[0-9]+]]:zpr = COPY $z0
; ENABLED-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z1
; ENABLED-NEXT: [[PTRUE_S:%[0-9]+]]:ppr_3b = PTRUE_S 31, implicit $vg
; ENABLED-NEXT: [[CMPEQ_PPzZZ_D:%[0-9]+]]:ppr = CMPEQ_PPzZZ_D [[PTRUE_S]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; ENABLED-NEXT: [[CMPEQ_PPzZZ_S:%[0-9]+]]:ppr = CMPEQ_PPzZZ_S [[PTRUE_S]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; ENABLED-NEXT: RET_ReallyLR
;
; DISABLED-LABEL: name: ptrue_s_replaces_ptrue_d_for_d_user
; DISABLED: liveins: $z0, $z1
; DISABLED-NEXT: {{ $}}
; DISABLED-NEXT: [[COPY:%[0-9]+]]:zpr = COPY $z0
; DISABLED-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z1
; DISABLED-NEXT: [[PTRUE_S:%[0-9]+]]:ppr_3b = PTRUE_S 31, implicit $vg
; DISABLED-NEXT: [[PTRUE_D:%[0-9]+]]:ppr_3b = PTRUE_D 31, implicit $vg
; DISABLED-NEXT: [[CMPEQ_PPzZZ_D:%[0-9]+]]:ppr = CMPEQ_PPzZZ_D [[PTRUE_D]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; DISABLED-NEXT: [[CMPEQ_PPzZZ_S:%[0-9]+]]:ppr = CMPEQ_PPzZZ_S [[PTRUE_S]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; DISABLED-NEXT: RET_ReallyLR
%2:zpr = COPY $z0
%3:zpr = COPY $z1
%0:ppr_3b = PTRUE_S 31, implicit $vg
%1:ppr_3b = PTRUE_D 31, implicit $vg
%4:ppr = CMPEQ_PPzZZ_D %1, %2, %3, implicit-def dead $nzcv
%5:ppr = CMPEQ_PPzZZ_S %0, %2, %3, implicit-def dead $nzcv
RET_ReallyLR
...
---
name: keep_non_all_ptrue
alignment: 2
tracksRegLiveness: true
registers:
- { id: 0, class: ppr_3b }
- { id: 1, class: ppr_3b }
- { id: 2, class: zpr }
- { id: 3, class: zpr }
- { id: 4, class: ppr }
- { id: 5, class: ppr }
liveins:
- { reg: '$z0', virtual-reg: '%2' }
- { reg: '$z1', virtual-reg: '%3' }
body: |
bb.0:
liveins: $z0, $z1
; CHECK-LABEL: name: keep_non_all_ptrue
; CHECK: liveins: $z0, $z1
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: [[COPY:%[0-9]+]]:zpr = COPY $z0
; CHECK-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z1
; CHECK-NEXT: [[PTRUE_B:%[0-9]+]]:ppr_3b = PTRUE_B 1, implicit $vg
; CHECK-NEXT: [[PTRUE_H:%[0-9]+]]:ppr_3b = PTRUE_H 31, implicit $vg
; CHECK-NEXT: [[CMPEQ_PPzZZ_B:%[0-9]+]]:ppr = CMPEQ_PPzZZ_B [[PTRUE_B]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; CHECK-NEXT: [[CMPEQ_PPzZZ_H:%[0-9]+]]:ppr = CMPEQ_PPzZZ_H [[PTRUE_H]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; CHECK-NEXT: RET_ReallyLR
%2:zpr = COPY $z0
%3:zpr = COPY $z1
%0:ppr_3b = PTRUE_B 1, implicit $vg
%1:ppr_3b = PTRUE_H 31, implicit $vg
%4:ppr = CMPEQ_PPzZZ_B %0, %2, %3, implicit-def dead $nzcv
%5:ppr = CMPEQ_PPzZZ_H %1, %2, %3, implicit-def dead $nzcv
RET_ReallyLR
...
---
name: keep_ptrue_s_when_existing_b_user_would_observe_extra_lanes
alignment: 2
tracksRegLiveness: true
registers:
- { id: 0, class: ppr_3b }
- { id: 1, class: ppr_3b }
- { id: 2, class: zpr }
- { id: 3, class: zpr }
- { id: 4, class: zpr }
- { id: 5, class: ppr }
liveins:
- { reg: '$z0', virtual-reg: '%2' }
- { reg: '$z1', virtual-reg: '%3' }
body: |
bb.0:
liveins: $z0, $z1
; CHECK-LABEL: name: keep_ptrue_s_when_existing_b_user_would_observe_extra_lanes
; CHECK: liveins: $z0, $z1
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: [[COPY:%[0-9]+]]:zpr = COPY $z0
; CHECK-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z1
; CHECK-NEXT: [[PTRUE_S:%[0-9]+]]:ppr_3b = PTRUE_S 31, implicit $vg
; CHECK-NEXT: [[ADD_ZPmZ_B:%[0-9]+]]:zpr = ADD_ZPmZ_B [[PTRUE_S]], [[COPY]], [[COPY1]]
; CHECK-NEXT: [[PTRUE_B:%[0-9]+]]:ppr_3b = PTRUE_B 31, implicit $vg
; CHECK-NEXT: [[CMPEQ_PPzZZ_B:%[0-9]+]]:ppr = CMPEQ_PPzZZ_B [[PTRUE_B]], [[ADD_ZPmZ_B]], [[COPY1]], implicit-def dead $nzcv
; CHECK-NEXT: RET_ReallyLR
%2:zpr = COPY $z0
%3:zpr = COPY $z1
%0:ppr_3b = PTRUE_S 31, implicit $vg
%4:zpr = ADD_ZPmZ_B %0, %2, %3
%1:ppr_3b = PTRUE_B 31, implicit $vg
%5:ppr = CMPEQ_PPzZZ_B %1, %4, %3, implicit-def dead $nzcv
RET_ReallyLR
...
---
name: do_notcoalesce_across_vg_definitions
alignment: 2
tracksRegLiveness: true
registers:
- { id: 0, class: ppr_3b }
- { id: 1, class: ppr_3b }
- { id: 2, class: zpr }
- { id: 3, class: zpr }
- { id: 4, class: ppr }
- { id: 5, class: ppr }
liveins:
- { reg: '$z0', virtual-reg: '%2' }
- { reg: '$z1', virtual-reg: '%3' }
body: |
bb.0:
liveins: $z0, $z1
; CHECK-LABEL: name: do_notcoalesce_across_vg_definitions
; CHECK: liveins: $z0, $z1
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: [[COPY:%[0-9]+]]:zpr = COPY $z0
; CHECK-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z1
; CHECK-NEXT: [[PTRUE_B:%[0-9]+]]:ppr_3b = PTRUE_B 31, implicit $vg
; CHECK-NEXT: [[CMPEQ_PPzZZ_B:%[0-9]+]]:ppr = CMPEQ_PPzZZ_B [[PTRUE_B]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; CHECK-NEXT: MSRpstatesvcrImm1 1, 1, csr_aarch64_smstartstop, implicit-def dead $nzcv, implicit $vg, implicit-def $vg
; CHECK-NEXT: [[PTRUE_H:%[0-9]+]]:ppr_3b = PTRUE_H 31, implicit $vg
; CHECK-NEXT: [[CMPEQ_PPzZZ_H:%[0-9]+]]:ppr = CMPEQ_PPzZZ_H [[PTRUE_H]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; CHECK-NEXT: RET_ReallyLR
%2:zpr = COPY $z0
%3:zpr = COPY $z1
%0:ppr_3b = PTRUE_B 31, implicit $vg
%5:ppr = CMPEQ_PPzZZ_B %0, %2, %3, implicit-def dead $nzcv
MSRpstatesvcrImm1 1, 1, csr_aarch64_smstartstop, implicit-def dead $nzcv, implicit $vg, implicit-def $vg
%1:ppr_3b = PTRUE_H 31, implicit $vg
%4:ppr = CMPEQ_PPzZZ_H %1, %2, %3, implicit-def dead $nzcv
RET_ReallyLR
...
---
name: constrained_ptrue_b_replaces_ptrue_h_for_h_user
alignment: 2
tracksRegLiveness: true
registers:
- { id: 0, class: ppr }
- { id: 1, class: ppr_3b }
- { id: 2, class: zpr }
- { id: 3, class: zpr }
- { id: 4, class: ppr }
- { id: 5, class: ppr }
- { id: 6, class: ppr }
liveins:
- { reg: '$z0', virtual-reg: '%2' }
- { reg: '$z1', virtual-reg: '%3' }
body: |
bb.0:
liveins: $z0, $z1
; ENABLED-LABEL: name: constrained_ptrue_b_replaces_ptrue_h_for_h_user
; ENABLED: liveins: $z0, $z1
; ENABLED-NEXT: {{ $}}
; ENABLED-NEXT: [[COPY:%[0-9]+]]:zpr = COPY $z0
; ENABLED-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z1
; ENABLED-NEXT: [[PTRUE_B:%[0-9]+]]:ppr_3b = PTRUE_B 31, implicit $vg
; ENABLED-NEXT: [[BRKN_PPzP:%[0-9]+]]:ppr = BRKN_PPzP [[PTRUE_B]], [[PTRUE_B]], [[PTRUE_B]]
; ENABLED-NEXT: [[CMPEQ_PPzZZ_H:%[0-9]+]]:ppr = CMPEQ_PPzZZ_H [[PTRUE_B]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; ENABLED-NEXT: RET_ReallyLR
;
; DISABLED-LABEL: name: constrained_ptrue_b_replaces_ptrue_h_for_h_user
; DISABLED: liveins: $z0, $z1
; DISABLED-NEXT: {{ $}}
; DISABLED-NEXT: [[COPY:%[0-9]+]]:zpr = COPY $z0
; DISABLED-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z1
; DISABLED-NEXT: [[PTRUE_B:%[0-9]+]]:ppr = PTRUE_B 31, implicit $vg
; DISABLED-NEXT: [[BRKN_PPzP:%[0-9]+]]:ppr = BRKN_PPzP [[PTRUE_B]], [[PTRUE_B]], [[PTRUE_B]]
; DISABLED-NEXT: [[PTRUE_H:%[0-9]+]]:ppr_3b = PTRUE_H 31, implicit $vg
; DISABLED-NEXT: [[CMPEQ_PPzZZ_H:%[0-9]+]]:ppr = CMPEQ_PPzZZ_H [[PTRUE_H]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; DISABLED-NEXT: RET_ReallyLR
%2:zpr = COPY $z0
%3:zpr = COPY $z1
%0:ppr = PTRUE_B 31, implicit $vg
%6:ppr = BRKN_PPzP %0, %0, %0
%1:ppr_3b = PTRUE_H 31, implicit $vg
%4:ppr = CMPEQ_PPzZZ_H %1, %2, %3, implicit-def dead $nzcv
RET_ReallyLR
...
---
name: keep_ptrue_when_constrain_regclass_fails
alignment: 2
tracksRegLiveness: true
registers:
- { id: 0, class: ppr_p8to15 }
- { id: 1, class: ppr_3b }
- { id: 2, class: zpr }
- { id: 3, class: zpr }
- { id: 4, class: ppr }
- { id: 5, class: ppr }
- { id: 6, class: ppr }
liveins:
- { reg: '$z0', virtual-reg: '%2' }
- { reg: '$z1', virtual-reg: '%3' }
body: |
bb.0:
liveins: $z0, $z1
; CHECK-LABEL: name: keep_ptrue_when_constrain_regclass_fails
; CHECK: liveins: $z0, $z1
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: [[COPY:%[0-9]+]]:zpr = COPY $z0
; CHECK-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z1
; CHECK-NEXT: [[PTRUE_B:%[0-9]+]]:ppr_p8to15 = PTRUE_B 31, implicit $vg
; CHECK-NEXT: [[BRKN_PPzP:%[0-9]+]]:ppr = BRKN_PPzP [[PTRUE_B]], [[PTRUE_B]], [[PTRUE_B]]
; CHECK-NEXT: [[PTRUE_H:%[0-9]+]]:ppr_3b = PTRUE_H 31, implicit $vg
; CHECK-NEXT: [[CMPEQ_PPzZZ_H:%[0-9]+]]:ppr = CMPEQ_PPzZZ_H [[PTRUE_H]], [[COPY]], [[COPY1]], implicit-def dead $nzcv
; CHECK-NEXT: RET_ReallyLR
%2:zpr = COPY $z0
%3:zpr = COPY $z1
%0:ppr_p8to15 = PTRUE_B 31, implicit $vg
%6:ppr = BRKN_PPzP %0, %0, %0
%1:ppr_3b = PTRUE_H 31, implicit $vg
%4:ppr = CMPEQ_PPzZZ_H %1, %2, %3, implicit-def dead $nzcv
RET_ReallyLR
...
---
name: ptrue_s_replaces_ptrue_d_for_d_user_fcmp
alignment: 2
tracksRegLiveness: true
registers:
- { id: 0, class: ppr_3b }
- { id: 1, class: ppr_3b }
- { id: 2, class: zpr }
- { id: 3, class: zpr }
- { id: 4, class: ppr }
- { id: 5, class: ppr }
liveins:
- { reg: '$z0', virtual-reg: '%2' }
- { reg: '$z1', virtual-reg: '%3' }
body: |
bb.0:
liveins: $z0, $z1
; ENABLED-LABEL: name: ptrue_s_replaces_ptrue_d_for_d_user_fcmp
; ENABLED: liveins: $z0, $z1
; ENABLED-NEXT: {{ $}}
; ENABLED-NEXT: [[COPY:%[0-9]+]]:zpr = COPY $z0
; ENABLED-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z1
; ENABLED-NEXT: [[PTRUE_S:%[0-9]+]]:ppr_3b = PTRUE_S 31, implicit $vg
; ENABLED-NEXT: [[FCMNE_PPzZZ_D:%[0-9]+]]:ppr = nofpexcept FCMNE_PPzZZ_D [[PTRUE_S]], [[COPY]], [[COPY1]]
; ENABLED-NEXT: [[FCMNE_PPzZZ_D1:%[0-9]+]]:ppr = nofpexcept FCMNE_PPzZZ_D [[PTRUE_S]], [[COPY]], [[COPY1]]
; ENABLED-NEXT: RET_ReallyLR
;
; DISABLED-LABEL: name: ptrue_s_replaces_ptrue_d_for_d_user_fcmp
; DISABLED: liveins: $z0, $z1
; DISABLED-NEXT: {{ $}}
; DISABLED-NEXT: [[COPY:%[0-9]+]]:zpr = COPY $z0
; DISABLED-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z1
; DISABLED-NEXT: [[PTRUE_S:%[0-9]+]]:ppr_3b = PTRUE_S 31, implicit $vg
; DISABLED-NEXT: [[PTRUE_D:%[0-9]+]]:ppr_3b = PTRUE_D 31, implicit $vg
; DISABLED-NEXT: [[FCMNE_PPzZZ_D:%[0-9]+]]:ppr = nofpexcept FCMNE_PPzZZ_D [[PTRUE_D]], [[COPY]], [[COPY1]]
; DISABLED-NEXT: [[FCMNE_PPzZZ_D1:%[0-9]+]]:ppr = nofpexcept FCMNE_PPzZZ_D [[PTRUE_S]], [[COPY]], [[COPY1]]
; DISABLED-NEXT: RET_ReallyLR
%2:zpr = COPY $z0
%3:zpr = COPY $z1
%0:ppr_3b = PTRUE_S 31, implicit $vg
%1:ppr_3b = PTRUE_D 31, implicit $vg
%4:ppr = nofpexcept FCMNE_PPzZZ_D %1, %2, %3
%5:ppr = nofpexcept FCMNE_PPzZZ_D %0, %2, %3
RET_ReallyLR
...
---
name: ptrue_s_replaces_ptrue_d_for_d_user_fcmpz
alignment: 2
tracksRegLiveness: true
registers:
- { id: 0, class: ppr_3b }
- { id: 1, class: ppr_3b }
- { id: 2, class: zpr }
- { id: 3, class: zpr }
- { id: 4, class: ppr }
- { id: 5, class: ppr }
liveins:
- { reg: '$z0', virtual-reg: '%2' }
- { reg: '$z1', virtual-reg: '%3' }
body: |
bb.0:
liveins: $z0, $z1
; ENABLED-LABEL: name: ptrue_s_replaces_ptrue_d_for_d_user_fcmpz
; ENABLED: liveins: $z0, $z1
; ENABLED-NEXT: {{ $}}
; ENABLED-NEXT: [[COPY:%[0-9]+]]:zpr = COPY $z0
; ENABLED-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z1
; ENABLED-NEXT: [[PTRUE_S:%[0-9]+]]:ppr_3b = PTRUE_S 31, implicit $vg
; ENABLED-NEXT: [[FCMNE_PPzZ0_D:%[0-9]+]]:ppr = nofpexcept FCMNE_PPzZ0_D [[PTRUE_S]], [[COPY]]
; ENABLED-NEXT: [[FCMNE_PPzZ0_D1:%[0-9]+]]:ppr = nofpexcept FCMNE_PPzZ0_D [[PTRUE_S]], [[COPY1]]
; ENABLED-NEXT: RET_ReallyLR
;
; DISABLED-LABEL: name: ptrue_s_replaces_ptrue_d_for_d_user_fcmpz
; DISABLED: liveins: $z0, $z1
; DISABLED-NEXT: {{ $}}
; DISABLED-NEXT: [[COPY:%[0-9]+]]:zpr = COPY $z0
; DISABLED-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z1
; DISABLED-NEXT: [[PTRUE_S:%[0-9]+]]:ppr_3b = PTRUE_S 31, implicit $vg
; DISABLED-NEXT: [[PTRUE_D:%[0-9]+]]:ppr_3b = PTRUE_D 31, implicit $vg
; DISABLED-NEXT: [[FCMNE_PPzZ0_D:%[0-9]+]]:ppr = nofpexcept FCMNE_PPzZ0_D [[PTRUE_D]], [[COPY]]
; DISABLED-NEXT: [[FCMNE_PPzZ0_D1:%[0-9]+]]:ppr = nofpexcept FCMNE_PPzZ0_D [[PTRUE_S]], [[COPY1]]
; DISABLED-NEXT: RET_ReallyLR
%2:zpr = COPY $z0
%3:zpr = COPY $z1
%0:ppr_3b = PTRUE_S 31, implicit $vg
%1:ppr_3b = PTRUE_D 31, implicit $vg
%4:ppr = nofpexcept FCMNE_PPzZ0_D %1, %2
%5:ppr = nofpexcept FCMNE_PPzZ0_D %0, %3
RET_ReallyLR
...
---
name: ptrue_d_replaces_ptrue_s_for_d_user_ld1_st1_reg_imm
alignment: 2
tracksRegLiveness: true
registers:
- { id: 0, class: gpr64common }
- { id: 1, class: ppr_3b }
- { id: 2, class: ppr_3b }
- { id: 3, class: zpr }
- { id: 4, class: zpr }
liveins:
- { reg: '$x0', virtual-reg: '%0' }
- { reg: '$z0', virtual-reg: '%3' }
body: |
bb.0:
liveins: $x0, $z0
; ENABLED-LABEL: name: ptrue_d_replaces_ptrue_s_for_d_user_ld1_st1_reg_imm
; ENABLED: liveins: $x0, $z0
; ENABLED-NEXT: {{ $}}
; ENABLED-NEXT: [[COPY:%[0-9]+]]:gpr64common = COPY $x0
; ENABLED-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z0
; ENABLED-NEXT: [[PTRUE_D:%[0-9]+]]:ppr_3b = PTRUE_D 31, implicit $vg
; ENABLED-NEXT: [[LD1W_D_IMM:%[0-9]+]]:zpr = LD1W_D_IMM [[PTRUE_D]], [[COPY]], 0 :: (load (<vscale x 1 x s64>))
; ENABLED-NEXT: ST1W_IMM [[COPY1]], [[PTRUE_D]], [[COPY]], 0 :: (store (<vscale x 4 x s32>))
; ENABLED-NEXT: RET_ReallyLR
;
; DISABLED-LABEL: name: ptrue_d_replaces_ptrue_s_for_d_user_ld1_st1_reg_imm
; DISABLED: liveins: $x0, $z0
; DISABLED-NEXT: {{ $}}
; DISABLED-NEXT: [[COPY:%[0-9]+]]:gpr64common = COPY $x0
; DISABLED-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z0
; DISABLED-NEXT: [[PTRUE_S:%[0-9]+]]:ppr_3b = PTRUE_S 31, implicit $vg
; DISABLED-NEXT: [[PTRUE_D:%[0-9]+]]:ppr_3b = PTRUE_D 31, implicit $vg
; DISABLED-NEXT: [[LD1W_D_IMM:%[0-9]+]]:zpr = LD1W_D_IMM [[PTRUE_S]], [[COPY]], 0 :: (load (<vscale x 1 x s64>))
; DISABLED-NEXT: ST1W_IMM [[COPY1]], [[PTRUE_D]], [[COPY]], 0 :: (store (<vscale x 4 x s32>))
; DISABLED-NEXT: RET_ReallyLR
%0:gpr64common = COPY $x0
%3:zpr = COPY $z0
%1:ppr_3b = PTRUE_S 31, implicit $vg
%2:ppr_3b = PTRUE_D 31, implicit $vg
%4:zpr = LD1W_D_IMM %1, %0, 0 :: (load (<vscale x 1 x s64>))
ST1W_IMM %3, %2, %0, 0 :: (store (<vscale x 4 x s32>))
RET_ReallyLR
...
---
name: ptrue_d_replaces_ptrue_s_for_d_user_ld1_st1_reg_reg
alignment: 2
tracksRegLiveness: true
registers:
- { id: 0, class: gpr64common }
- { id: 1, class: ppr_3b }
- { id: 2, class: ppr_3b }
- { id: 3, class: zpr }
- { id: 4, class: zpr }
- { id: 5, class: gpr64common }
liveins:
- { reg: '$x0', virtual-reg: '%0' }
- { reg: '$x1', virtual-reg: '%5' }
- { reg: '$z0', virtual-reg: '%3' }
body: |
bb.0:
liveins: $x0, $x1, $z0
; ENABLED-LABEL: name: ptrue_d_replaces_ptrue_s_for_d_user_ld1_st1_reg_reg
; ENABLED: liveins: $x0, $x1, $z0
; ENABLED-NEXT: {{ $}}
; ENABLED-NEXT: [[COPY:%[0-9]+]]:gpr64common = COPY $x0
; ENABLED-NEXT: [[COPY1:%[0-9]+]]:gpr64common = COPY $x1
; ENABLED-NEXT: [[COPY2:%[0-9]+]]:zpr = COPY $z0
; ENABLED-NEXT: [[PTRUE_D:%[0-9]+]]:ppr_3b = PTRUE_D 31, implicit $vg
; ENABLED-NEXT: [[LD1W_D:%[0-9]+]]:zpr = LD1W_D [[PTRUE_D]], [[COPY]], [[COPY1]] :: (load (<vscale x 1 x s64>))
; ENABLED-NEXT: ST1W [[COPY2]], [[PTRUE_D]], [[COPY]], [[COPY1]] :: (store (<vscale x 4 x s32>))
; ENABLED-NEXT: RET_ReallyLR
;
; DISABLED-LABEL: name: ptrue_d_replaces_ptrue_s_for_d_user_ld1_st1_reg_reg
; DISABLED: liveins: $x0, $x1, $z0
; DISABLED-NEXT: {{ $}}
; DISABLED-NEXT: [[COPY:%[0-9]+]]:gpr64common = COPY $x0
; DISABLED-NEXT: [[COPY1:%[0-9]+]]:gpr64common = COPY $x1
; DISABLED-NEXT: [[COPY2:%[0-9]+]]:zpr = COPY $z0
; DISABLED-NEXT: [[PTRUE_S:%[0-9]+]]:ppr_3b = PTRUE_S 31, implicit $vg
; DISABLED-NEXT: [[PTRUE_D:%[0-9]+]]:ppr_3b = PTRUE_D 31, implicit $vg
; DISABLED-NEXT: [[LD1W_D:%[0-9]+]]:zpr = LD1W_D [[PTRUE_S]], [[COPY]], [[COPY1]] :: (load (<vscale x 1 x s64>))
; DISABLED-NEXT: ST1W [[COPY2]], [[PTRUE_D]], [[COPY]], [[COPY1]] :: (store (<vscale x 4 x s32>))
; DISABLED-NEXT: RET_ReallyLR
%0:gpr64common = COPY $x0
%5:gpr64common = COPY $x1
%3:zpr = COPY $z0
%1:ppr_3b = PTRUE_S 31, implicit $vg
%2:ppr_3b = PTRUE_D 31, implicit $vg
%4:zpr = LD1W_D %1, %0, %5 :: (load (<vscale x 1 x s64>))
ST1W %3, %2, %0, %5 :: (store (<vscale x 4 x s32>))
RET_ReallyLR
...
---
name: ptrue_s_replaces_ptrue_d_for_d_user_ld1r_reg_imm
alignment: 2
tracksRegLiveness: true
registers:
- { id: 0, class: gpr64common }
- { id: 1, class: ppr_3b }
- { id: 2, class: ppr_3b }
- { id: 3, class: zpr }
- { id: 4, class: zpr }
liveins:
- { reg: '$x0', virtual-reg: '%0' }
- { reg: '$z0', virtual-reg: '%3' }
body: |
bb.0:
liveins: $x0, $z0
; ENABLED-LABEL: name: ptrue_s_replaces_ptrue_d_for_d_user_ld1r_reg_imm
; ENABLED: liveins: $x0, $z0
; ENABLED-NEXT: {{ $}}
; ENABLED-NEXT: [[COPY:%[0-9]+]]:gpr64common = COPY $x0
; ENABLED-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z0
; ENABLED-NEXT: [[PTRUE_S:%[0-9]+]]:ppr_3b = PTRUE_S 31, implicit $vg
; ENABLED-NEXT: [[LD1RW_D_IMM:%[0-9]+]]:zpr = LD1RW_D_IMM [[PTRUE_S]], [[COPY]], 0 :: (load (<vscale x 1 x s64>))
; ENABLED-NEXT: [[FCMNE_PPzZ0_D:%[0-9]+]]:ppr = nofpexcept FCMNE_PPzZ0_D [[PTRUE_S]], [[COPY1]]
; ENABLED-NEXT: RET_ReallyLR
;
; DISABLED-LABEL: name: ptrue_s_replaces_ptrue_d_for_d_user_ld1r_reg_imm
; DISABLED: liveins: $x0, $z0
; DISABLED-NEXT: {{ $}}
; DISABLED-NEXT: [[COPY:%[0-9]+]]:gpr64common = COPY $x0
; DISABLED-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z0
; DISABLED-NEXT: [[PTRUE_S:%[0-9]+]]:ppr_3b = PTRUE_S 31, implicit $vg
; DISABLED-NEXT: [[PTRUE_D:%[0-9]+]]:ppr_3b = PTRUE_D 31, implicit $vg
; DISABLED-NEXT: [[LD1RW_D_IMM:%[0-9]+]]:zpr = LD1RW_D_IMM [[PTRUE_S]], [[COPY]], 0 :: (load (<vscale x 1 x s64>))
; DISABLED-NEXT: [[FCMNE_PPzZ0_D:%[0-9]+]]:ppr = nofpexcept FCMNE_PPzZ0_D [[PTRUE_D]], [[COPY1]]
; DISABLED-NEXT: RET_ReallyLR
%0:gpr64common = COPY $x0
%3:zpr = COPY $z0
%1:ppr_3b = PTRUE_S 31, implicit $vg
%2:ppr_3b = PTRUE_D 31, implicit $vg
%4:zpr = LD1RW_D_IMM %1, %0, 0 :: (load (<vscale x 1 x s64>))
%5:ppr = nofpexcept FCMNE_PPzZ0_D %2, %3
RET_ReallyLR
...
---
name: ptrue_d_replaces_ptrue_s_for_d_user_ldnt1_stnt1_reg_imm
alignment: 2
tracksRegLiveness: true
registers:
- { id: 0, class: gpr64common }
- { id: 1, class: ppr_3b }
- { id: 2, class: ppr_3b }
- { id: 3, class: zpr }
- { id: 4, class: zpr }
liveins:
- { reg: '$x0', virtual-reg: '%0' }
- { reg: '$z0', virtual-reg: '%3' }
body: |
bb.0:
liveins: $x0, $z0
; ENABLED-LABEL: name: ptrue_d_replaces_ptrue_s_for_d_user_ldnt1_stnt1_reg_imm
; ENABLED: liveins: $x0, $z0
; ENABLED-NEXT: {{ $}}
; ENABLED-NEXT: [[COPY:%[0-9]+]]:gpr64common = COPY $x0
; ENABLED-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z0
; ENABLED-NEXT: [[PTRUE_D:%[0-9]+]]:ppr_3b = PTRUE_D 31, implicit $vg
; ENABLED-NEXT: [[LDNT1D_ZRI:%[0-9]+]]:zpr = LDNT1D_ZRI [[PTRUE_D]], [[COPY]], 0 :: (load (<vscale x 1 x s64>))
; ENABLED-NEXT: STNT1W_ZRI [[COPY1]], [[PTRUE_D]], [[COPY]], 0 :: (store (<vscale x 4 x s32>))
; ENABLED-NEXT: RET_ReallyLR
;
; DISABLED-LABEL: name: ptrue_d_replaces_ptrue_s_for_d_user_ldnt1_stnt1_reg_imm
; DISABLED: liveins: $x0, $z0
; DISABLED-NEXT: {{ $}}
; DISABLED-NEXT: [[COPY:%[0-9]+]]:gpr64common = COPY $x0
; DISABLED-NEXT: [[COPY1:%[0-9]+]]:zpr = COPY $z0
; DISABLED-NEXT: [[PTRUE_S:%[0-9]+]]:ppr_3b = PTRUE_S 31, implicit $vg
; DISABLED-NEXT: [[PTRUE_D:%[0-9]+]]:ppr_3b = PTRUE_D 31, implicit $vg
; DISABLED-NEXT: [[LDNT1D_ZRI:%[0-9]+]]:zpr = LDNT1D_ZRI [[PTRUE_S]], [[COPY]], 0 :: (load (<vscale x 1 x s64>))
; DISABLED-NEXT: STNT1W_ZRI [[COPY1]], [[PTRUE_D]], [[COPY]], 0 :: (store (<vscale x 4 x s32>))
; DISABLED-NEXT: RET_ReallyLR
%0:gpr64common = COPY $x0
%3:zpr = COPY $z0
%1:ppr_3b = PTRUE_S 31, implicit $vg
%2:ppr_3b = PTRUE_D 31, implicit $vg
%4:zpr = LDNT1D_ZRI %1, %0, 0 :: (load (<vscale x 1 x s64>))
STNT1W_ZRI %3, %2, %0, 0 :: (store (<vscale x 4 x s32>))
RET_ReallyLR
...
---
name: ptrue_d_replaces_ptrue_s_for_d_user_ldnt1_stnt1_reg_reg
alignment: 2
tracksRegLiveness: true
registers:
- { id: 0, class: gpr64common }
- { id: 1, class: ppr_3b }
- { id: 2, class: ppr_3b }
- { id: 3, class: zpr }
- { id: 4, class: zpr }
- { id: 5, class: gpr64common }
liveins:
- { reg: '$x0', virtual-reg: '%0' }
- { reg: '$x1', virtual-reg: '%5' }
- { reg: '$z0', virtual-reg: '%3' }
body: |
bb.0:
liveins: $x0, $x1, $z0
; ENABLED-LABEL: name: ptrue_d_replaces_ptrue_s_for_d_user_ldnt1_stnt1_reg_reg
; ENABLED: liveins: $x0, $x1, $z0
; ENABLED-NEXT: {{ $}}
; ENABLED-NEXT: [[COPY:%[0-9]+]]:gpr64common = COPY $x0
; ENABLED-NEXT: [[COPY1:%[0-9]+]]:gpr64common = COPY $x1
; ENABLED-NEXT: [[COPY2:%[0-9]+]]:zpr = COPY $z0
; ENABLED-NEXT: [[PTRUE_D:%[0-9]+]]:ppr_3b = PTRUE_D 31, implicit $vg
; ENABLED-NEXT: [[LDNT1D_ZRR:%[0-9]+]]:zpr = LDNT1D_ZRR [[PTRUE_D]], [[COPY]], [[COPY1]] :: (load (<vscale x 1 x s64>))
; ENABLED-NEXT: STNT1W_ZRR [[COPY2]], [[PTRUE_D]], [[COPY]], [[COPY1]] :: (store (<vscale x 4 x s32>))
; ENABLED-NEXT: RET_ReallyLR
;
; DISABLED-LABEL: name: ptrue_d_replaces_ptrue_s_for_d_user_ldnt1_stnt1_reg_reg
; DISABLED: liveins: $x0, $x1, $z0
; DISABLED-NEXT: {{ $}}
; DISABLED-NEXT: [[COPY:%[0-9]+]]:gpr64common = COPY $x0
; DISABLED-NEXT: [[COPY1:%[0-9]+]]:gpr64common = COPY $x1
; DISABLED-NEXT: [[COPY2:%[0-9]+]]:zpr = COPY $z0
; DISABLED-NEXT: [[PTRUE_S:%[0-9]+]]:ppr_3b = PTRUE_S 31, implicit $vg
; DISABLED-NEXT: [[PTRUE_D:%[0-9]+]]:ppr_3b = PTRUE_D 31, implicit $vg
; DISABLED-NEXT: [[LDNT1D_ZRR:%[0-9]+]]:zpr = LDNT1D_ZRR [[PTRUE_S]], [[COPY]], [[COPY1]] :: (load (<vscale x 1 x s64>))
; DISABLED-NEXT: STNT1W_ZRR [[COPY2]], [[PTRUE_D]], [[COPY]], [[COPY1]] :: (store (<vscale x 4 x s32>))
; DISABLED-NEXT: RET_ReallyLR
%0:gpr64common = COPY $x0
%5:gpr64common = COPY $x1
%3:zpr = COPY $z0
%1:ppr_3b = PTRUE_S 31, implicit $vg
%2:ppr_3b = PTRUE_D 31, implicit $vg
%4:zpr = LDNT1D_ZRR %1, %0, %5 :: (load (<vscale x 1 x s64>))
STNT1W_ZRR %3, %2, %0, %5 :: (store (<vscale x 4 x s32>))
RET_ReallyLR
...