[llvm] [AArch64][SME] Spill p-regs as z-regs when streaming hazards are possible (PR #123752)
Benjamin Maxwell via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 22 05:30:48 PST 2025
================
@@ -0,0 +1,1035 @@
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5
+# RUN: llc -mtriple=aarch64-linux-gnu -aarch64-enable-zpr-predicate-spills -run-pass=greedy %s -o - | FileCheck %s
+# RUN: llc -mtriple=aarch64-linux-gnu -aarch64-enable-zpr-predicate-spills -start-before=greedy -stop-after=aarch64-expand-pseudo -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=EXPAND
+--- |
+ source_filename = "<stdin>"
+ target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
+ target triple = "aarch64--linux-gnu"
+
+ define aarch64_sve_vector_pcs void @zpr_predicate_spill() #0 { entry: unreachable }
+
+ define aarch64_sve_vector_pcs void @zpr_predicate_spill__save_restore_nzcv() #0 { entry: unreachable }
+
+ define aarch64_sve_vector_pcs void @zpr_predicate_spill__save_restore_nzcv__spill_gpr() #0 { entry: unreachable }
+
+ define aarch64_sve_vector_pcs void @zpr_predicate_spill__spill_zpr() #0 { entry: unreachable }
+
+ define aarch64_sve_vector_pcs void @zpr_predicate_spill_above_p7() #0 { entry: unreachable }
+
+ define aarch64_sve_vector_pcs void @zpr_predicate_spill_p4_saved() #0 { entry: unreachable }
+
+ attributes #0 = {nounwind "target-features"="+sme,+sve" "aarch64_pstate_sm_compatible"}
+...
+---
+name: zpr_predicate_spill
+tracksRegLiveness: true
+stack:
+liveins:
+ - { reg: '$p0' }
+body: |
+ bb.0.entry:
+ liveins: $p0
+
+ ; CHECK-LABEL: name: zpr_predicate_spill
+ ; CHECK: stack:
+ ; CHECK: - { id: 0, name: '', type: spill-slot, offset: 0, size: 16, alignment: 16,
+ ; CHECK-NEXT: stack-id: scalable-vector, callee-saved-register:
+ ; CHECK: liveins: $p0
+ ; CHECK-NEXT: {{ $}}
+ ;
+ ; CHECK-NEXT: SPILL_PPR_TO_ZPR_SLOT_PSEUDO $p0, %stack.0, 0 :: (store (s128) into %stack.0)
+ ;
+ ; CHECK-NEXT: $p0 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p1 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p2 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p3 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p4 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p5 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p6 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p7 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p8 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p9 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p10 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p11 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p12 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p13 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p14 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p15 = IMPLICIT_DEF
+ ;
+ ; CHECK-NEXT: $p0 = FILL_PPR_FROM_ZPR_SLOT_PSEUDO %stack.0, 0 :: (load (s128) from %stack.0)
+ ; CHECK-NEXT: RET_ReallyLR implicit $p0
+
+ ; EXPAND-LABEL: name: zpr_predicate_spill
+ ; EXPAND: liveins: $p0, $fp, $p15, $p14, $p13, $p12, $p11, $p10, $p9, $p8, $p7, $p6, $p5, $p4
+ ; EXPAND-NEXT: {{ $}}
+ ;
+ ; EXPAND-NEXT: early-clobber $sp = frame-setup STRXpre killed $fp, $sp, -16 :: (store (s64) into %stack.13)
+ ; EXPAND-NEXT: $sp = frame-setup ADDVL_XXI $sp, -12, implicit $vg
+ ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p15, 1, 0
+ ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 0 :: (store (s128) into %stack.12)
+ ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p14, 1, 0
+ ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 1 :: (store (s128) into %stack.11)
+ ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p13, 1, 0
+ ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 2 :: (store (s128) into %stack.10)
+ ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p12, 1, 0
+ ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 3 :: (store (s128) into %stack.9)
+ ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p11, 1, 0
+ ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 4 :: (store (s128) into %stack.8)
+ ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p10, 1, 0
+ ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 5 :: (store (s128) into %stack.7)
+ ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p9, 1, 0
+ ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 6 :: (store (s128) into %stack.6)
+ ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p8, 1, 0
+ ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 7 :: (store (s128) into %stack.5)
+ ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p7, 1, 0
+ ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 8 :: (store (s128) into %stack.4)
+ ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p6, 1, 0
+ ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 9 :: (store (s128) into %stack.3)
+ ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p5, 1, 0
+ ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 10 :: (store (s128) into %stack.2)
+ ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p4, 1, 0
+ ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 11 :: (store (s128) into %stack.1)
+ ; EXPAND-NEXT: $sp = frame-setup ADDVL_XXI $sp, -1, implicit $vg
+ ;
+ ; EXPAND-NEXT: $z0 = CPY_ZPzI_B $p0, 1, 0
+ ; EXPAND-NEXT: STR_ZXI $z0, $sp, 0 :: (store (s128) into %stack.0)
+ ;
+ ; EXPAND-NEXT: $p0 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p1 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p2 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p3 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p4 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p5 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p6 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p7 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p8 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p9 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p10 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p11 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p12 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p13 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p14 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p15 = IMPLICIT_DEF
+ ;
+ ; EXPAND-NEXT: $z0 = LDR_ZXI $sp, 0 :: (load (s128) from %stack.0)
+ ; EXPAND-NEXT: $p0 = PTRUE_B 31, implicit $vg
+ ; EXPAND-NEXT: $p0 = CMPNE_PPzZI_B $p0, $z0, 0, implicit-def $nzcv, implicit-def $nzcv
+ ;
+ ; EXPAND-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 1, implicit $vg
+ ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 0 :: (load (s128) from %stack.12)
+ ; EXPAND-NEXT: $p1 = frame-destroy PTRUE_B 31, implicit $vg
+ ; EXPAND-NEXT: $p15 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv
+ ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 1 :: (load (s128) from %stack.11)
+ ; EXPAND-NEXT: $p1 = frame-destroy PTRUE_B 31, implicit $vg
+ ; EXPAND-NEXT: $p14 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv
+ ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 2 :: (load (s128) from %stack.10)
+ ; EXPAND-NEXT: $p1 = frame-destroy PTRUE_B 31, implicit $vg
+ ; EXPAND-NEXT: $p13 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv
+ ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 3 :: (load (s128) from %stack.9)
+ ; EXPAND-NEXT: $p1 = frame-destroy PTRUE_B 31, implicit $vg
+ ; EXPAND-NEXT: $p12 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv
+ ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 4 :: (load (s128) from %stack.8)
+ ; EXPAND-NEXT: $p1 = frame-destroy PTRUE_B 31, implicit $vg
+ ; EXPAND-NEXT: $p11 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv
+ ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 5 :: (load (s128) from %stack.7)
+ ; EXPAND-NEXT: $p1 = frame-destroy PTRUE_B 31, implicit $vg
+ ; EXPAND-NEXT: $p10 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv
+ ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 6 :: (load (s128) from %stack.6)
+ ; EXPAND-NEXT: $p1 = frame-destroy PTRUE_B 31, implicit $vg
+ ; EXPAND-NEXT: $p9 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv
+ ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 7 :: (load (s128) from %stack.5)
+ ; EXPAND-NEXT: $p1 = frame-destroy PTRUE_B 31, implicit $vg
+ ; EXPAND-NEXT: $p8 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv
+ ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 8 :: (load (s128) from %stack.4)
+ ; EXPAND-NEXT: $p7 = frame-destroy PTRUE_B 31, implicit $vg
+ ; EXPAND-NEXT: $p7 = frame-destroy CMPNE_PPzZI_B $p7, $z0, 0, implicit-def $nzcv, implicit-def $nzcv
+ ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 9 :: (load (s128) from %stack.3)
+ ; EXPAND-NEXT: $p6 = frame-destroy PTRUE_B 31, implicit $vg
+ ; EXPAND-NEXT: $p6 = frame-destroy CMPNE_PPzZI_B $p6, $z0, 0, implicit-def $nzcv, implicit-def $nzcv
+ ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 10 :: (load (s128) from %stack.2)
+ ; EXPAND-NEXT: $p5 = frame-destroy PTRUE_B 31, implicit $vg
+ ; EXPAND-NEXT: $p5 = frame-destroy CMPNE_PPzZI_B $p5, $z0, 0, implicit-def $nzcv, implicit-def $nzcv
+ ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 11 :: (load (s128) from %stack.1)
+ ; EXPAND-NEXT: $p4 = frame-destroy PTRUE_B 31, implicit $vg
+ ; EXPAND-NEXT: $p4 = frame-destroy CMPNE_PPzZI_B $p4, $z0, 0, implicit-def $nzcv, implicit-def $nzcv
+ ; EXPAND-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 12, implicit $vg
+ ; EXPAND-NEXT: early-clobber $sp, $fp = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.13)
+ ; EXPAND-NEXT: RET undef $lr, implicit $p0
+ %1:ppr = COPY $p0
+
+ $p0 = IMPLICIT_DEF
+ $p1 = IMPLICIT_DEF
+ $p2 = IMPLICIT_DEF
+ $p3 = IMPLICIT_DEF
+ $p4 = IMPLICIT_DEF
+ $p5 = IMPLICIT_DEF
+ $p6 = IMPLICIT_DEF
+ $p7 = IMPLICIT_DEF
+ $p8 = IMPLICIT_DEF
+ $p9 = IMPLICIT_DEF
+ $p10 = IMPLICIT_DEF
+ $p11 = IMPLICIT_DEF
+ $p12 = IMPLICIT_DEF
+ $p13 = IMPLICIT_DEF
+ $p14 = IMPLICIT_DEF
+ $p15 = IMPLICIT_DEF
+
+ $p0 = COPY %1
+
+ RET_ReallyLR implicit $p0
+...
+---
+name: zpr_predicate_spill__save_restore_nzcv
+tracksRegLiveness: true
+stack:
+liveins:
+ - { reg: '$p0' }
+body: |
+ bb.0.entry:
+ liveins: $p0
+
+ ; CHECK-LABEL: name: zpr_predicate_spill__save_restore_nzcv
+ ; CHECK: stack:
+ ; CHECK: - { id: 0, name: '', type: spill-slot, offset: 0, size: 16, alignment: 16,
+ ; CHECK-NEXT: stack-id: scalable-vector, callee-saved-register:
+ ; CHECK: liveins: $p0
+ ; CHECK-NEXT: {{ $}}
+ ;
+ ; CHECK-NEXT: $nzcv = IMPLICIT_DEF
+ ;
+ ; CHECK-NEXT: SPILL_PPR_TO_ZPR_SLOT_PSEUDO $p0, %stack.0, 0 :: (store (s128) into %stack.0)
+ ;
+ ; CHECK-NEXT: $p0 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p1 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p2 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p3 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p4 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p5 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p6 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p7 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p8 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p9 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p10 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p11 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p12 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p13 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p14 = IMPLICIT_DEF
+ ; CHECK-NEXT: $p15 = IMPLICIT_DEF
+ ;
+ ; CHECK-NEXT: $p0 = FILL_PPR_FROM_ZPR_SLOT_PSEUDO %stack.0, 0 :: (load (s128) from %stack.0)
+ ;
+ ; CHECK-NEXT: FAKE_USE implicit $nzcv
+ ; CHECK-NEXT: RET_ReallyLR implicit $p0
+
+ ; EXPAND-LABEL: name: zpr_predicate_spill__save_restore_nzcv
+ ; EXPAND: liveins: $p0, $fp, $p15, $p14, $p13, $p12, $p11, $p10, $p9, $p8, $p7, $p6, $p5, $p4
+ ; EXPAND-NEXT: {{ $}}
+ ;
+ ; EXPAND-NEXT: early-clobber $sp = frame-setup STRXpre killed $fp, $sp, -16 :: (store (s64) into %stack.13)
+ ; EXPAND-NEXT: $sp = frame-setup ADDVL_XXI $sp, -12, implicit $vg
+ ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p15, 1, 0
+ ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 0 :: (store (s128) into %stack.12)
+ ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p14, 1, 0
+ ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 1 :: (store (s128) into %stack.11)
+ ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p13, 1, 0
+ ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 2 :: (store (s128) into %stack.10)
+ ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p12, 1, 0
+ ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 3 :: (store (s128) into %stack.9)
+ ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p11, 1, 0
+ ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 4 :: (store (s128) into %stack.8)
+ ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p10, 1, 0
+ ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 5 :: (store (s128) into %stack.7)
+ ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p9, 1, 0
+ ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 6 :: (store (s128) into %stack.6)
+ ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p8, 1, 0
+ ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 7 :: (store (s128) into %stack.5)
+ ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p7, 1, 0
+ ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 8 :: (store (s128) into %stack.4)
+ ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p6, 1, 0
+ ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 9 :: (store (s128) into %stack.3)
+ ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p5, 1, 0
+ ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 10 :: (store (s128) into %stack.2)
+ ; EXPAND-NEXT: $z0 = frame-setup CPY_ZPzI_B killed $p4, 1, 0
+ ; EXPAND-NEXT: frame-setup STR_ZXI $z0, $sp, 11 :: (store (s128) into %stack.1)
+ ; EXPAND-NEXT: $sp = frame-setup ADDVL_XXI $sp, -1, implicit $vg
+ ;
+ ; EXPAND-NEXT: $nzcv = IMPLICIT_DEF
+ ;
+ ; EXPAND-NEXT: $z0 = CPY_ZPzI_B $p0, 1, 0
+ ; EXPAND-NEXT: STR_ZXI $z0, $sp, 0 :: (store (s128) into %stack.0)
+ ;
+ ; EXPAND-NEXT: $p0 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p1 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p2 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p3 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p4 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p5 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p6 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p7 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p8 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p9 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p10 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p11 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p12 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p13 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p14 = IMPLICIT_DEF
+ ; EXPAND-NEXT: $p15 = IMPLICIT_DEF
+ ;
+ ; EXPAND-NEXT: $z0 = LDR_ZXI $sp, 0 :: (load (s128) from %stack.0)
+ ; EXPAND-NEXT: $x0 = MRS 55824, implicit-def $nzcv, implicit $nzcv
+ ; EXPAND-NEXT: $p0 = PTRUE_B 31, implicit $vg
+ ; EXPAND-NEXT: $p0 = CMPNE_PPzZI_B $p0, $z0, 0, implicit-def $nzcv, implicit-def $nzcv
+ ; EXPAND-NEXT: MSR 55824, $x0, implicit-def $nzcv
+ ;
+ ; EXPAND-NEXT: FAKE_USE implicit $nzcv
+ ;
+ ; EXPAND-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 1, implicit $vg
+ ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 0 :: (load (s128) from %stack.12)
+ ; EXPAND-NEXT: $p1 = frame-destroy PTRUE_B 31, implicit $vg
+ ; EXPAND-NEXT: $p15 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv
+ ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 1 :: (load (s128) from %stack.11)
+ ; EXPAND-NEXT: $p1 = frame-destroy PTRUE_B 31, implicit $vg
+ ; EXPAND-NEXT: $p14 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv
+ ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 2 :: (load (s128) from %stack.10)
+ ; EXPAND-NEXT: $p1 = frame-destroy PTRUE_B 31, implicit $vg
+ ; EXPAND-NEXT: $p13 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv
+ ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 3 :: (load (s128) from %stack.9)
+ ; EXPAND-NEXT: $p1 = frame-destroy PTRUE_B 31, implicit $vg
+ ; EXPAND-NEXT: $p12 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv
+ ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 4 :: (load (s128) from %stack.8)
+ ; EXPAND-NEXT: $p1 = frame-destroy PTRUE_B 31, implicit $vg
+ ; EXPAND-NEXT: $p11 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv
+ ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 5 :: (load (s128) from %stack.7)
+ ; EXPAND-NEXT: $p1 = frame-destroy PTRUE_B 31, implicit $vg
+ ; EXPAND-NEXT: $p10 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv
+ ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 6 :: (load (s128) from %stack.6)
+ ; EXPAND-NEXT: $p1 = frame-destroy PTRUE_B 31, implicit $vg
+ ; EXPAND-NEXT: $p9 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv
+ ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 7 :: (load (s128) from %stack.5)
+ ; EXPAND-NEXT: $p1 = frame-destroy PTRUE_B 31, implicit $vg
+ ; EXPAND-NEXT: $p8 = frame-destroy CMPNE_PPzZI_B $p1, $z0, 0, implicit-def $nzcv, implicit-def $nzcv
+ ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 8 :: (load (s128) from %stack.4)
+ ; EXPAND-NEXT: $p7 = frame-destroy PTRUE_B 31, implicit $vg
+ ; EXPAND-NEXT: $p7 = frame-destroy CMPNE_PPzZI_B $p7, $z0, 0, implicit-def $nzcv, implicit-def $nzcv
+ ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 9 :: (load (s128) from %stack.3)
+ ; EXPAND-NEXT: $p6 = frame-destroy PTRUE_B 31, implicit $vg
+ ; EXPAND-NEXT: $p6 = frame-destroy CMPNE_PPzZI_B $p6, $z0, 0, implicit-def $nzcv, implicit-def $nzcv
+ ; EXPAND-NEXT: $z0 = frame-destroy LDR_ZXI $sp, 10 :: (load (s128) from %stack.2)
+ ; EXPAND-NEXT: $p5 = frame-destroy PTRUE_B 31, implicit $vg
----------------
MacDue wrote:
Note: I have a small follow-up patch ready that reduces the amount of `ptrue` instructions created.
https://github.com/llvm/llvm-project/pull/123752
More information about the llvm-commits
mailing list