brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.8 KiB · 863d4d1 Raw
220 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve -run-pass=prologepilog -simplify-mir -verify-machineinstrs %s -o - | FileCheck %s3#4# Test that prologepilog works for each of the LDNT1/STNT1 instructions for stack-based objects.5#6--- |7  define void @testcase_positive_offset() uwtable {8    %dummy = alloca <vscale x 2 x i64>, align 89    %object = alloca <vscale x 2 x i64>, align 810    ; Reads from %object at offset 7 * readsize11    ret void12  }13  define void @testcase_negative_offset() uwtable {14    %dummy = alloca <vscale x 2 x i64>, align 815    %object = alloca <vscale x 2 x i64>, align 816    ; Reads from %object at offset -8 * readsize17    ret void18  }19 20  define void @testcase_positive_offset_out_of_range() uwtable {21    %dummy = alloca <vscale x 2 x i64>, align 822    %object = alloca <vscale x 2 x i64>, align 823    ; Reads from %object at offset 8 * readsize24    ret void25  }26  define void @testcase_negative_offset_out_of_range() uwtable {27    %dummy = alloca <vscale x 2 x i64>, align 828    %object = alloca <vscale x 2 x i64>, align 829    ; Reads from %object at offset -9 * readsize30    ret void31  }32...33---34name:            testcase_positive_offset35tracksRegLiveness: true36stack:37  - { id: 0, name: dummy, type: default, offset: 0, size: 32, alignment: 16, stack-id: scalable-vector }38  - { id: 1, name: object, type: default, offset: 0, size: 32, alignment: 16, stack-id: scalable-vector }39body:             |40  bb.0 (%ir-block.0):41    liveins: $p042 43    ; CHECK-LABEL: name: testcase_positive_offset44    ; CHECK: liveins: $p0, $fp45    ; CHECK-NEXT: {{  $}}46    ; CHECK-NEXT: early-clobber $sp = frame-setup STRXpre killed $fp, $sp, -16 :: (store (s64) into %stack.2)47    ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 1648    ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $w29, -1649    ; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -4, implicit $vg50    ; CHECK-NEXT: frame-setup CFI_INSTRUCTION escape 0x0f, 0x09, 0x8f, 0x10, 0x92, 0x2e, 0x00, 0x11, 0x20, 0x1e, 0x2251    ; CHECK-NEXT: renamable $z0 = LDNT1B_ZRI renamable $p0, $sp, 7 :: (load (s8) from %ir.object, align 2)52    ; CHECK-NEXT: renamable $z0 = LDNT1H_ZRI renamable $p0, $sp, 7 :: (load (s16) from %ir.object)53    ; CHECK-NEXT: renamable $z0 = LDNT1W_ZRI renamable $p0, $sp, 7 :: (load (s32) from %ir.object, align 8)54    ; CHECK-NEXT: renamable $z0 = LDNT1D_ZRI renamable $p0, $sp, 7 :: (load (s64) from %ir.object)55    ; CHECK-NEXT: STNT1B_ZRI renamable $z0, renamable $p0, $sp, 7 :: (store (s8) into %ir.object, align 8)56    ; CHECK-NEXT: STNT1H_ZRI renamable $z0, renamable $p0, $sp, 7 :: (store (s16) into %ir.object, align 8)57    ; CHECK-NEXT: STNT1W_ZRI renamable $z0, renamable $p0, $sp, 7 :: (store (s32) into %ir.object, align 8)58    ; CHECK-NEXT: STNT1D_ZRI renamable $z0, renamable $p0, $sp, 7 :: (store (s64) into %ir.object)59    ; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 4, implicit $vg60    ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa $wsp, 1661    ; CHECK-NEXT: early-clobber $sp, $fp = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.2)62    ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 063    ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w2964    ; CHECK-NEXT: RET_ReallyLR implicit $z065    renamable $z0 = LDNT1B_ZRI renamable $p0, %stack.1.object, 7 :: (load 1 from %ir.object, align 2)66    renamable $z0 = LDNT1H_ZRI renamable $p0, %stack.1.object, 7 :: (load 2 from %ir.object, align 2)67    renamable $z0 = LDNT1W_ZRI renamable $p0, %stack.1.object, 7 :: (load 4 from %ir.object, align 8)68    renamable $z0 = LDNT1D_ZRI renamable $p0, %stack.1.object, 7 :: (load 8 from %ir.object, align 8)69    STNT1B_ZRI renamable $z0, renamable $p0, %stack.1.object, 7 :: (store 1 into %ir.object, align 8)70    STNT1H_ZRI renamable $z0, renamable $p0, %stack.1.object, 7 :: (store 2 into %ir.object, align 8)71    STNT1W_ZRI renamable $z0, renamable $p0, %stack.1.object, 7 :: (store 4 into %ir.object, align 8)72    STNT1D_ZRI renamable $z0, renamable $p0, %stack.1.object, 7 :: (store 8 into %ir.object, align 8)73    RET_ReallyLR implicit $z074...75 76---77name:            testcase_negative_offset78tracksRegLiveness: true79stack:80  - { id: 0, name: dummy, type: default, offset: 0, size: 32, alignment: 16, stack-id: scalable-vector }81  - { id: 1, name: object, type: default, offset: 0, size: 32, alignment: 16, stack-id: scalable-vector }82body:             |83  bb.0 (%ir-block.0):84    liveins: $p085 86    ; CHECK-LABEL: name: testcase_negative_offset87    ; CHECK: liveins: $p0, $fp88    ; CHECK-NEXT: {{  $}}89    ; CHECK-NEXT: early-clobber $sp = frame-setup STRXpre killed $fp, $sp, -16 :: (store (s64) into %stack.2)90    ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 1691    ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $w29, -1692    ; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -4, implicit $vg93    ; CHECK-NEXT: frame-setup CFI_INSTRUCTION escape 0x0f, 0x09, 0x8f, 0x10, 0x92, 0x2e, 0x00, 0x11, 0x20, 0x1e, 0x2294    ; CHECK-NEXT: renamable $z0 = LDNT1B_ZRI renamable $p0, $sp, -8 :: (load (s8) from %ir.object, align 2)95    ; CHECK-NEXT: renamable $z0 = LDNT1H_ZRI renamable $p0, $sp, -8 :: (load (s16) from %ir.object)96    ; CHECK-NEXT: renamable $z0 = LDNT1W_ZRI renamable $p0, $sp, -8 :: (load (s32) from %ir.object)97    ; CHECK-NEXT: renamable $z0 = LDNT1D_ZRI renamable $p0, $sp, -8 :: (load (s64) from %ir.object)98    ; CHECK-NEXT: STNT1B_ZRI renamable $z0, renamable $p0, $sp, -8 :: (store (s8) into %ir.object, align 8)99    ; CHECK-NEXT: STNT1H_ZRI renamable $z0, renamable $p0, $sp, -8 :: (store (s16) into %ir.object, align 8)100    ; CHECK-NEXT: STNT1W_ZRI renamable $z0, renamable $p0, $sp, -8 :: (store (s32) into %ir.object, align 8)101    ; CHECK-NEXT: STNT1D_ZRI renamable $z0, renamable $p0, $sp, -8 :: (store (s64) into %ir.object)102    ; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 4, implicit $vg103    ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa $wsp, 16104    ; CHECK-NEXT: early-clobber $sp, $fp = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.2)105    ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0106    ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w29107    ; CHECK-NEXT: RET_ReallyLR implicit $z0108    renamable $z0 = LDNT1B_ZRI renamable $p0, %stack.1.object, -8 :: (load 1 from %ir.object, align 2)109    renamable $z0 = LDNT1H_ZRI renamable $p0, %stack.1.object, -8 :: (load 2 from %ir.object, align 2)110    renamable $z0 = LDNT1W_ZRI renamable $p0, %stack.1.object, -8 :: (load 4 from %ir.object, align 4)111    renamable $z0 = LDNT1D_ZRI renamable $p0, %stack.1.object, -8 :: (load 8 from %ir.object, align 8)112    STNT1B_ZRI renamable $z0, renamable $p0, %stack.1.object, -8 :: (store 1 into %ir.object, align 8)113    STNT1H_ZRI renamable $z0, renamable $p0, %stack.1.object, -8 :: (store 2 into %ir.object, align 8)114    STNT1W_ZRI renamable $z0, renamable $p0, %stack.1.object, -8 :: (store 4 into %ir.object, align 8)115    STNT1D_ZRI renamable $z0, renamable $p0, %stack.1.object, -8 :: (store 8 into %ir.object, align 8)116    RET_ReallyLR implicit $z0117...118 119---120name:            testcase_positive_offset_out_of_range121tracksRegLiveness: true122stack:123  - { id: 0, name: dummy, type: default, offset: 0, size: 32, alignment: 16, stack-id: scalable-vector }124  - { id: 1, name: object, type: default, offset: 0, size: 32, alignment: 16, stack-id: scalable-vector }125body:             |126  bb.0 (%ir-block.0):127    liveins: $p0128 129    ; CHECK-LABEL: name: testcase_positive_offset_out_of_range130    ; CHECK: liveins: $p0, $fp131    ; CHECK-NEXT: {{  $}}132    ; CHECK-NEXT: early-clobber $sp = frame-setup STRXpre killed $fp, $sp, -16 :: (store (s64) into %stack.2)133    ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16134    ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $w29, -16135    ; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -4, implicit $vg136    ; CHECK-NEXT: frame-setup CFI_INSTRUCTION escape 0x0f, 0x09, 0x8f, 0x10, 0x92, 0x2e, 0x00, 0x11, 0x20, 0x1e, 0x22137    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, 1, implicit $vg138    ; CHECK-NEXT: renamable $z0 = LDNT1B_ZRI renamable $p0, killed $x8, 7 :: (load (s8) from %ir.object, align 2)139    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, 1, implicit $vg140    ; CHECK-NEXT: renamable $z0 = LDNT1H_ZRI renamable $p0, killed $x8, 7 :: (load (s16) from %ir.object)141    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, 1, implicit $vg142    ; CHECK-NEXT: renamable $z0 = LDNT1W_ZRI renamable $p0, killed $x8, 7 :: (load (s32) from %ir.object)143    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, 1, implicit $vg144    ; CHECK-NEXT: renamable $z0 = LDNT1D_ZRI renamable $p0, killed $x8, 7 :: (load (s64) from %ir.object)145    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, 1, implicit $vg146    ; CHECK-NEXT: STNT1B_ZRI renamable $z0, renamable $p0, killed $x8, 7 :: (store (s8) into %ir.object, align 8)147    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, 1, implicit $vg148    ; CHECK-NEXT: STNT1H_ZRI renamable $z0, renamable $p0, killed $x8, 7 :: (store (s16) into %ir.object, align 8)149    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, 1, implicit $vg150    ; CHECK-NEXT: STNT1W_ZRI renamable $z0, renamable $p0, killed $x8, 7 :: (store (s32) into %ir.object, align 8)151    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, 1, implicit $vg152    ; CHECK-NEXT: STNT1D_ZRI renamable $z0, renamable $p0, killed $x8, 7 :: (store (s64) into %ir.object)153    ; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 4, implicit $vg154    ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa $wsp, 16155    ; CHECK-NEXT: early-clobber $sp, $fp = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.2)156    ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0157    ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w29158    ; CHECK-NEXT: RET_ReallyLR implicit $z0159    renamable $z0 = LDNT1B_ZRI renamable $p0, %stack.1.object, 8 :: (load 1 from %ir.object, align 2)160    renamable $z0 = LDNT1H_ZRI renamable $p0, %stack.1.object, 8 :: (load 2 from %ir.object, align 2)161    renamable $z0 = LDNT1W_ZRI renamable $p0, %stack.1.object, 8 :: (load 4 from %ir.object, align 4)162    renamable $z0 = LDNT1D_ZRI renamable $p0, %stack.1.object, 8 :: (load 8 from %ir.object, align 8)163    STNT1B_ZRI renamable $z0, renamable $p0, %stack.1.object, 8 :: (store 1 into %ir.object, align 8)164    STNT1H_ZRI renamable $z0, renamable $p0, %stack.1.object, 8 :: (store 2 into %ir.object, align 8)165    STNT1W_ZRI renamable $z0, renamable $p0, %stack.1.object, 8 :: (store 4 into %ir.object, align 8)166    STNT1D_ZRI renamable $z0, renamable $p0, %stack.1.object, 8 :: (store 8 into %ir.object, align 8)167    RET_ReallyLR implicit $z0168...169 170---171name:            testcase_negative_offset_out_of_range172tracksRegLiveness: true173stack:174  - { id: 0, name: dummy, type: default, offset: 0, size: 32, alignment: 16, stack-id: scalable-vector }175  - { id: 1, name: object, type: default, offset: 0, size: 32, alignment: 16, stack-id: scalable-vector }176body:             |177  bb.0 (%ir-block.0):178    liveins: $p0179 180    ; CHECK-LABEL: name: testcase_negative_offset_out_of_range181    ; CHECK: liveins: $p0, $fp182    ; CHECK-NEXT: {{  $}}183    ; CHECK-NEXT: early-clobber $sp = frame-setup STRXpre killed $fp, $sp, -16 :: (store (s64) into %stack.2)184    ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16185    ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $w29, -16186    ; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -4, implicit $vg187    ; CHECK-NEXT: frame-setup CFI_INSTRUCTION escape 0x0f, 0x09, 0x8f, 0x10, 0x92, 0x2e, 0x00, 0x11, 0x20, 0x1e, 0x22188    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, -1, implicit $vg189    ; CHECK-NEXT: renamable $z0 = LDNT1B_ZRI renamable $p0, killed $x8, -8 :: (load (s8) from %ir.object, align 2)190    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, -1, implicit $vg191    ; CHECK-NEXT: renamable $z0 = LDNT1H_ZRI renamable $p0, killed $x8, -8 :: (load (s16) from %ir.object)192    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, -1, implicit $vg193    ; CHECK-NEXT: renamable $z0 = LDNT1W_ZRI renamable $p0, killed $x8, -8 :: (load (s32) from %ir.object)194    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, -1, implicit $vg195    ; CHECK-NEXT: renamable $z0 = LDNT1D_ZRI renamable $p0, killed $x8, -8 :: (load (s64) from %ir.object)196    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, -1, implicit $vg197    ; CHECK-NEXT: STNT1B_ZRI renamable $z0, renamable $p0, killed $x8, -8 :: (store (s8) into %ir.object, align 8)198    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, -1, implicit $vg199    ; CHECK-NEXT: STNT1H_ZRI renamable $z0, renamable $p0, killed $x8, -8 :: (store (s16) into %ir.object, align 8)200    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, -1, implicit $vg201    ; CHECK-NEXT: STNT1W_ZRI renamable $z0, renamable $p0, killed $x8, -8 :: (store (s32) into %ir.object, align 8)202    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, -1, implicit $vg203    ; CHECK-NEXT: STNT1D_ZRI renamable $z0, renamable $p0, killed $x8, -8 :: (store (s64) into %ir.object)204    ; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 4, implicit $vg205    ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa $wsp, 16206    ; CHECK-NEXT: early-clobber $sp, $fp = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.2)207    ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0208    ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w29209    ; CHECK-NEXT: RET_ReallyLR implicit $z0210    renamable $z0 = LDNT1B_ZRI renamable $p0, %stack.1.object, -9 :: (load 1 from %ir.object, align 2)211    renamable $z0 = LDNT1H_ZRI renamable $p0, %stack.1.object, -9 :: (load 2 from %ir.object, align 2)212    renamable $z0 = LDNT1W_ZRI renamable $p0, %stack.1.object, -9 :: (load 4 from %ir.object, align 4)213    renamable $z0 = LDNT1D_ZRI renamable $p0, %stack.1.object, -9 :: (load 8 from %ir.object, align 8)214    STNT1B_ZRI renamable $z0, renamable $p0, %stack.1.object, -9 :: (store 1 into %ir.object, align 8)215    STNT1H_ZRI renamable $z0, renamable $p0, %stack.1.object, -9 :: (store 2 into %ir.object, align 8)216    STNT1W_ZRI renamable $z0, renamable $p0, %stack.1.object, -9 :: (store 4 into %ir.object, align 8)217    STNT1D_ZRI renamable $z0, renamable $p0, %stack.1.object, -9 :: (store 8 into %ir.object, align 8)218    RET_ReallyLR implicit $z0219...220