brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.5 KiB · b6b89ab Raw
262 lines · plain
1# RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve -run-pass=prologepilog -simplify-mir -verify-machineinstrs %s -o - | FileCheck %s2# RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve -start-before=prologepilog -simplify-mir -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK-OFFSET3 4--- |5  define void @testcase_valid_offset() nounwind { entry: unreachable }6  define void @testcase_offset_out_of_range() nounwind { entry: unreachable }7...8---9name:            testcase_valid_offset10tracksRegLiveness: true11stack:12  - { id: 0, name: '', type: default, offset: 0, size: 512, alignment: 16, stack-id: scalable-vector }13body:             |14  bb.0:15    liveins: $p016 17    ; CHECK-LABEL: name: testcase_valid_offset18    ; CHECK: liveins: $p019    ; CHECK-NEXT: {{  $}}20    ; CHECK-NEXT: early-clobber $sp = frame-setup STRXpre killed $fp, $sp, -16 :: (store (s64) into %stack.1)21    ; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -3222    ; CHECK-NEXT: renamable $z0_z1 = LD2B_IMM renamable $p0, $sp, -823    ; CHECK-NEXT: renamable $z0_z1 = LD2B_IMM renamable $p0, $sp, 724    ; CHECK-NEXT: renamable $z0_z1 = LD2H_IMM renamable $p0, $sp, -825    ; CHECK-NEXT: renamable $z0_z1 = LD2H_IMM renamable $p0, $sp, 726    ; CHECK-NEXT: renamable $z0_z1 = LD2W_IMM renamable $p0, $sp, -827    ; CHECK-NEXT: renamable $z0_z1 = LD2W_IMM renamable $p0, $sp, 728    ; CHECK-NEXT: renamable $z0_z1 = LD2D_IMM renamable $p0, $sp, -829    ; CHECK-NEXT: renamable $z0_z1 = LD2D_IMM renamable $p0, $sp, 730    ; CHECK-NEXT: renamable $z0_z1_z2 = LD3B_IMM renamable $p0, $sp, -831    ; CHECK-NEXT: renamable $z0_z1_z2 = LD3B_IMM renamable $p0, $sp, 732    ; CHECK-NEXT: renamable $z0_z1_z2 = LD3H_IMM renamable $p0, $sp, -833    ; CHECK-NEXT: renamable $z0_z1_z2 = LD3H_IMM renamable $p0, $sp, 734    ; CHECK-NEXT: renamable $z0_z1_z2 = LD3W_IMM renamable $p0, $sp, -835    ; CHECK-NEXT: renamable $z0_z1_z2 = LD3W_IMM renamable $p0, $sp, 736    ; CHECK-NEXT: renamable $z0_z1_z2 = LD3D_IMM renamable $p0, $sp, -837    ; CHECK-NEXT: renamable $z0_z1_z2 = LD3D_IMM renamable $p0, $sp, 738    ; CHECK-NEXT: renamable $z0_z1_z2_z3 = LD4B_IMM renamable $p0, $sp, -839    ; CHECK-NEXT: renamable $z0_z1_z2_z3 = LD4B_IMM renamable $p0, $sp, 740    ; CHECK-NEXT: renamable $z0_z1_z2_z3 = LD4H_IMM renamable $p0, $sp, -841    ; CHECK-NEXT: renamable $z0_z1_z2_z3 = LD4H_IMM renamable $p0, $sp, 742    ; CHECK-NEXT: renamable $z0_z1_z2_z3 = LD4W_IMM renamable $p0, $sp, -843    ; CHECK-NEXT: renamable $z0_z1_z2_z3 = LD4W_IMM renamable $p0, $sp, 744    ; CHECK-NEXT: renamable $z0_z1_z2_z3 = LD4D_IMM renamable $p0, $sp, -845    ; CHECK-NEXT: renamable $z0_z1_z2_z3 = LD4D_IMM renamable $p0, $sp, 746    ; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 3147    ; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 148    ; CHECK-NEXT: early-clobber $sp, $fp = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.1)49    ; CHECK-NEXT: RET_ReallyLR implicit $z0, implicit $z1, implicit $z2, implicit $z350 51    ; CHECK-OFFSET-LABEL: testcase_valid_offset:52    ; CHECK-OFFSET: str x29, [sp, #-16]!53    ; CHECK-OFFSET-NEXT: addvl sp, sp, #-3254    ; CHECK-OFFSET-NEXT: ld2b { z0.b, z1.b }, p0/z, [sp, #-16, mul vl]55    ; CHECK-OFFSET-NEXT: ld2b { z0.b, z1.b }, p0/z, [sp, #14, mul vl]56    ; CHECK-OFFSET-NEXT: ld2h { z0.h, z1.h }, p0/z, [sp, #-16, mul vl]57    ; CHECK-OFFSET-NEXT: ld2h { z0.h, z1.h }, p0/z, [sp, #14, mul vl]58    ; CHECK-OFFSET-NEXT: ld2w { z0.s, z1.s }, p0/z, [sp, #-16, mul vl]59    ; CHECK-OFFSET-NEXT: ld2w { z0.s, z1.s }, p0/z, [sp, #14, mul vl]60    ; CHECK-OFFSET-NEXT: ld2d { z0.d, z1.d }, p0/z, [sp, #-16, mul vl]61    ; CHECK-OFFSET-NEXT: ld2d { z0.d, z1.d }, p0/z, [sp, #14, mul vl]62    ; CHECK-OFFSET-NEXT: ld3b { z0.b - z2.b }, p0/z, [sp, #-24, mul vl]63    ; CHECK-OFFSET-NEXT: ld3b { z0.b - z2.b }, p0/z, [sp, #21, mul vl]64    ; CHECK-OFFSET-NEXT: ld3h { z0.h - z2.h }, p0/z, [sp, #-24, mul vl]65    ; CHECK-OFFSET-NEXT: ld3h { z0.h - z2.h }, p0/z, [sp, #21, mul vl]66    ; CHECK-OFFSET-NEXT: ld3w { z0.s - z2.s }, p0/z, [sp, #-24, mul vl]67    ; CHECK-OFFSET-NEXT: ld3w { z0.s - z2.s }, p0/z, [sp, #21, mul vl]68    ; CHECK-OFFSET-NEXT: ld3d { z0.d - z2.d }, p0/z, [sp, #-24, mul vl]69    ; CHECK-OFFSET-NEXT: ld3d { z0.d - z2.d }, p0/z, [sp, #21, mul vl]70    ; CHECK-OFFSET-NEXT: ld4b { z0.b - z3.b }, p0/z, [sp, #-32, mul vl]71    ; CHECK-OFFSET-NEXT: ld4b { z0.b - z3.b }, p0/z, [sp, #28, mul vl]72    ; CHECK-OFFSET-NEXT: ld4h { z0.h - z3.h }, p0/z, [sp, #-32, mul vl]73    ; CHECK-OFFSET-NEXT: ld4h { z0.h - z3.h }, p0/z, [sp, #28, mul vl]74    ; CHECK-OFFSET-NEXT: ld4w { z0.s - z3.s }, p0/z, [sp, #-32, mul vl]75    ; CHECK-OFFSET-NEXT: ld4w { z0.s - z3.s }, p0/z, [sp, #28, mul vl]76    ; CHECK-OFFSET-NEXT: ld4d { z0.d - z3.d }, p0/z, [sp, #-32, mul vl]77    ; CHECK-OFFSET-NEXT: ld4d { z0.d - z3.d }, p0/z, [sp, #28, mul vl]78    ; CHECK-OFFSET-NEXT: addvl sp, sp, #3179    ; CHECK-OFFSET-NEXT: addvl sp, sp, #180    ; CHECK-OFFSET-NEXT: ldr x29, [sp], #1681    ; CHECK-OFFSET-NEXT: ret82 83    renamable $z0_z1 = LD2B_IMM renamable $p0, %stack.0, -884    renamable $z0_z1 = LD2B_IMM renamable $p0, %stack.0, 785    renamable $z0_z1 = LD2H_IMM renamable $p0, %stack.0, -886    renamable $z0_z1 = LD2H_IMM renamable $p0, %stack.0, 787    renamable $z0_z1 = LD2W_IMM renamable $p0, %stack.0, -888    renamable $z0_z1 = LD2W_IMM renamable $p0, %stack.0, 789    renamable $z0_z1 = LD2D_IMM renamable $p0, %stack.0, -890    renamable $z0_z1 = LD2D_IMM renamable $p0, %stack.0, 791 92    renamable $z0_z1_z2 = LD3B_IMM renamable $p0, %stack.0, -893    renamable $z0_z1_z2 = LD3B_IMM renamable $p0, %stack.0, 794    renamable $z0_z1_z2 = LD3H_IMM renamable $p0, %stack.0, -895    renamable $z0_z1_z2 = LD3H_IMM renamable $p0, %stack.0, 796    renamable $z0_z1_z2 = LD3W_IMM renamable $p0, %stack.0, -897    renamable $z0_z1_z2 = LD3W_IMM renamable $p0, %stack.0, 798    renamable $z0_z1_z2 = LD3D_IMM renamable $p0, %stack.0, -899    renamable $z0_z1_z2 = LD3D_IMM renamable $p0, %stack.0, 7100 101    renamable $z0_z1_z2_z3 = LD4B_IMM renamable $p0, %stack.0, -8102    renamable $z0_z1_z2_z3 = LD4B_IMM renamable $p0, %stack.0, 7103    renamable $z0_z1_z2_z3 = LD4H_IMM renamable $p0, %stack.0, -8104    renamable $z0_z1_z2_z3 = LD4H_IMM renamable $p0, %stack.0, 7105    renamable $z0_z1_z2_z3 = LD4W_IMM renamable $p0, %stack.0, -8106    renamable $z0_z1_z2_z3 = LD4W_IMM renamable $p0, %stack.0, 7107    renamable $z0_z1_z2_z3 = LD4D_IMM renamable $p0, %stack.0, -8108    renamable $z0_z1_z2_z3 = LD4D_IMM renamable $p0, %stack.0, 7109    RET_ReallyLR implicit $z0, implicit $z1, implicit $z2, implicit $z3110...111---112name:            testcase_offset_out_of_range113tracksRegLiveness: true114stack:115  - { id: 0, name: '', type: default, offset: 0, size: 512, alignment: 16, stack-id: scalable-vector }116body:             |117  bb.0:118    liveins: $p0119 120    ; CHECK-LABEL: name: testcase_offset_out_of_range121    ; CHECK: liveins: $p0122    ; CHECK-NEXT: {{  $}}123    ; CHECK-NEXT: early-clobber $sp = frame-setup STRXpre killed $fp, $sp, -16 :: (store (s64) into %stack.1)124    ; CHECK-NEXT: $sp = frame-setup ADDVL_XXI $sp, -32125    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, -2126    ; CHECK-NEXT: renamable $z0_z1 = LD2B_IMM renamable $p0, killed $x8, -8127    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, 2128    ; CHECK-NEXT: renamable $z0_z1 = LD2B_IMM renamable $p0, killed $x8, 7129    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, -2130    ; CHECK-NEXT: renamable $z0_z1 = LD2H_IMM renamable $p0, killed $x8, -8131    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, 2132    ; CHECK-NEXT: renamable $z0_z1 = LD2H_IMM renamable $p0, killed $x8, 7133    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, -2134    ; CHECK-NEXT: renamable $z0_z1 = LD2W_IMM renamable $p0, killed $x8, -8135    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, 2136    ; CHECK-NEXT: renamable $z0_z1 = LD2W_IMM renamable $p0, killed $x8, 7137    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, -2138    ; CHECK-NEXT: renamable $z0_z1 = LD2D_IMM renamable $p0, killed $x8, -8139    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, 2140    ; CHECK-NEXT: renamable $z0_z1 = LD2D_IMM renamable $p0, killed $x8, 7141    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, -3142    ; CHECK-NEXT: renamable $z0_z1_z2 = LD3B_IMM renamable $p0, killed $x8, -8143    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, 3144    ; CHECK-NEXT: renamable $z0_z1_z2 = LD3B_IMM renamable $p0, killed $x8, 7145    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, -3146    ; CHECK-NEXT: renamable $z0_z1_z2 = LD3H_IMM renamable $p0, killed $x8, -8147    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, 3148    ; CHECK-NEXT: renamable $z0_z1_z2 = LD3H_IMM renamable $p0, killed $x8, 7149    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, -3150    ; CHECK-NEXT: renamable $z0_z1_z2 = LD3W_IMM renamable $p0, killed $x8, -8151    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, 3152    ; CHECK-NEXT: renamable $z0_z1_z2 = LD3W_IMM renamable $p0, killed $x8, 7153    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, -3154    ; CHECK-NEXT: renamable $z0_z1_z2 = LD3D_IMM renamable $p0, killed $x8, -8155    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, 3156    ; CHECK-NEXT: renamable $z0_z1_z2 = LD3D_IMM renamable $p0, killed $x8, 7157    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, -4158    ; CHECK-NEXT: renamable $z0_z1_z2_z3 = LD4B_IMM renamable $p0, killed $x8, -8159    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, 4160    ; CHECK-NEXT: renamable $z0_z1_z2_z3 = LD4B_IMM renamable $p0, killed $x8, 7161    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, -4162    ; CHECK-NEXT: renamable $z0_z1_z2_z3 = LD4H_IMM renamable $p0, killed $x8, -8163    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, 4164    ; CHECK-NEXT: renamable $z0_z1_z2_z3 = LD4H_IMM renamable $p0, killed $x8, 7165    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, -4166    ; CHECK-NEXT: renamable $z0_z1_z2_z3 = LD4W_IMM renamable $p0, killed $x8, -8167    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, 4168    ; CHECK-NEXT: renamable $z0_z1_z2_z3 = LD4W_IMM renamable $p0, killed $x8, 7169    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, -4170    ; CHECK-NEXT: renamable $z0_z1_z2_z3 = LD4D_IMM renamable $p0, killed $x8, -8171    ; CHECK-NEXT: $x8 = ADDVL_XXI $sp, 4172    ; CHECK-NEXT: renamable $z0_z1_z2_z3 = LD4D_IMM renamable $p0, killed $x8, 7173    ; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 31174    ; CHECK-NEXT: $sp = frame-destroy ADDVL_XXI $sp, 1175    ; CHECK-NEXT: early-clobber $sp, $fp = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.1)176    ; CHECK-NEXT: RET_ReallyLR implicit $z0, implicit $z1, implicit $z2, implicit $z3177 178    ; CHECK-OFFSET-LABEL: testcase_offset_out_of_range:179    ; CHECK-OFFSET: str x29, [sp, #-16]!180    ; CHECK-OFFSET-NEXT: addvl sp, sp, #-32181    ; CHECK-OFFSET-NEXT: addvl x8, sp, #-2182    ; CHECK-OFFSET-NEXT: ld2b { z0.b, z1.b }, p0/z, [x8, #-16, mul vl]183    ; CHECK-OFFSET-NEXT: addvl x8, sp, #2184    ; CHECK-OFFSET-NEXT: ld2b { z0.b, z1.b }, p0/z, [x8, #14, mul vl]185    ; CHECK-OFFSET-NEXT: addvl x8, sp, #-2186    ; CHECK-OFFSET-NEXT: ld2h { z0.h, z1.h }, p0/z, [x8, #-16, mul vl]187    ; CHECK-OFFSET-NEXT: addvl x8, sp, #2188    ; CHECK-OFFSET-NEXT: ld2h { z0.h, z1.h }, p0/z, [x8, #14, mul vl]189    ; CHECK-OFFSET-NEXT: addvl x8, sp, #-2190    ; CHECK-OFFSET-NEXT: ld2w { z0.s, z1.s }, p0/z, [x8, #-16, mul vl]191    ; CHECK-OFFSET-NEXT: addvl x8, sp, #2192    ; CHECK-OFFSET-NEXT: ld2w { z0.s, z1.s }, p0/z, [x8, #14, mul vl]193    ; CHECK-OFFSET-NEXT: addvl x8, sp, #-2194    ; CHECK-OFFSET-NEXT: ld2d { z0.d, z1.d }, p0/z, [x8, #-16, mul vl]195    ; CHECK-OFFSET-NEXT: addvl x8, sp, #2196    ; CHECK-OFFSET-NEXT: ld2d { z0.d, z1.d }, p0/z, [x8, #14, mul vl]197    ; CHECK-OFFSET-NEXT: addvl x8, sp, #-3198    ; CHECK-OFFSET-NEXT: ld3b { z0.b - z2.b }, p0/z, [x8, #-24, mul vl]199    ; CHECK-OFFSET-NEXT: addvl x8, sp, #3200    ; CHECK-OFFSET-NEXT: ld3b { z0.b - z2.b }, p0/z, [x8, #21, mul vl]201    ; CHECK-OFFSET-NEXT: addvl x8, sp, #-3202    ; CHECK-OFFSET-NEXT: ld3h { z0.h - z2.h }, p0/z, [x8, #-24, mul vl]203    ; CHECK-OFFSET-NEXT: addvl x8, sp, #3204    ; CHECK-OFFSET-NEXT: ld3h { z0.h - z2.h }, p0/z, [x8, #21, mul vl]205    ; CHECK-OFFSET-NEXT: addvl x8, sp, #-3206    ; CHECK-OFFSET-NEXT: ld3w { z0.s - z2.s }, p0/z, [x8, #-24, mul vl]207    ; CHECK-OFFSET-NEXT: addvl x8, sp, #3208    ; CHECK-OFFSET-NEXT: ld3w { z0.s - z2.s }, p0/z, [x8, #21, mul vl]209    ; CHECK-OFFSET-NEXT: addvl x8, sp, #-3210    ; CHECK-OFFSET-NEXT: ld3d { z0.d - z2.d }, p0/z, [x8, #-24, mul vl]211    ; CHECK-OFFSET-NEXT: addvl x8, sp, #3212    ; CHECK-OFFSET-NEXT: ld3d { z0.d - z2.d }, p0/z, [x8, #21, mul vl]213    ; CHECK-OFFSET-NEXT: addvl x8, sp, #-4214    ; CHECK-OFFSET-NEXT: ld4b { z0.b - z3.b }, p0/z, [x8, #-32, mul vl]215    ; CHECK-OFFSET-NEXT: addvl x8, sp, #4216    ; CHECK-OFFSET-NEXT: ld4b { z0.b - z3.b }, p0/z, [x8, #28, mul vl]217    ; CHECK-OFFSET-NEXT: addvl x8, sp, #-4218    ; CHECK-OFFSET-NEXT: ld4h { z0.h - z3.h }, p0/z, [x8, #-32, mul vl]219    ; CHECK-OFFSET-NEXT: addvl x8, sp, #4220    ; CHECK-OFFSET-NEXT: ld4h { z0.h - z3.h }, p0/z, [x8, #28, mul vl]221    ; CHECK-OFFSET-NEXT: addvl x8, sp, #-4222    ; CHECK-OFFSET-NEXT: ld4w { z0.s - z3.s }, p0/z, [x8, #-32, mul vl]223    ; CHECK-OFFSET-NEXT: addvl x8, sp, #4224    ; CHECK-OFFSET-NEXT: ld4w { z0.s - z3.s }, p0/z, [x8, #28, mul vl]225    ; CHECK-OFFSET-NEXT: addvl x8, sp, #-4226    ; CHECK-OFFSET-NEXT: ld4d { z0.d - z3.d }, p0/z, [x8, #-32, mul vl]227    ; CHECK-OFFSET-NEXT: addvl x8, sp, #4228    ; CHECK-OFFSET-NEXT: ld4d { z0.d - z3.d }, p0/z, [x8, #28, mul vl]229    ; CHECK-OFFSET-NEXT: addvl sp, sp, #31230    ; CHECK-OFFSET-NEXT: addvl sp, sp, #1231    ; CHECK-OFFSET-NEXT: ldr x29, [sp], #16232    ; CHECK-OFFSET-NEXT: ret233 234    renamable $z0_z1 = LD2B_IMM renamable $p0, %stack.0, -9235    renamable $z0_z1 = LD2B_IMM renamable $p0, %stack.0, 8236    renamable $z0_z1 = LD2H_IMM renamable $p0, %stack.0, -9237    renamable $z0_z1 = LD2H_IMM renamable $p0, %stack.0, 8238    renamable $z0_z1 = LD2W_IMM renamable $p0, %stack.0, -9239    renamable $z0_z1 = LD2W_IMM renamable $p0, %stack.0, 8240    renamable $z0_z1 = LD2D_IMM renamable $p0, %stack.0, -9241    renamable $z0_z1 = LD2D_IMM renamable $p0, %stack.0, 8242 243    renamable $z0_z1_z2 = LD3B_IMM renamable $p0, %stack.0, -9244    renamable $z0_z1_z2 = LD3B_IMM renamable $p0, %stack.0, 8245    renamable $z0_z1_z2 = LD3H_IMM renamable $p0, %stack.0, -9246    renamable $z0_z1_z2 = LD3H_IMM renamable $p0, %stack.0, 8247    renamable $z0_z1_z2 = LD3W_IMM renamable $p0, %stack.0, -9248    renamable $z0_z1_z2 = LD3W_IMM renamable $p0, %stack.0, 8249    renamable $z0_z1_z2 = LD3D_IMM renamable $p0, %stack.0, -9250    renamable $z0_z1_z2 = LD3D_IMM renamable $p0, %stack.0, 8251 252    renamable $z0_z1_z2_z3 = LD4B_IMM renamable $p0, %stack.0, -9253    renamable $z0_z1_z2_z3 = LD4B_IMM renamable $p0, %stack.0, 8254    renamable $z0_z1_z2_z3 = LD4H_IMM renamable $p0, %stack.0, -9255    renamable $z0_z1_z2_z3 = LD4H_IMM renamable $p0, %stack.0, 8256    renamable $z0_z1_z2_z3 = LD4W_IMM renamable $p0, %stack.0, -9257    renamable $z0_z1_z2_z3 = LD4W_IMM renamable $p0, %stack.0, 8258    renamable $z0_z1_z2_z3 = LD4D_IMM renamable $p0, %stack.0, -9259    renamable $z0_z1_z2_z3 = LD4D_IMM renamable $p0, %stack.0, 8260    RET_ReallyLR implicit $z0, implicit $z1, implicit $z2, implicit $z3261...262