brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.1 KiB · 71ac704 Raw
118 lines · plain
1// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sme2 2>&1 < %s | FileCheck %s2 3// --------------------------------------------------------------------------//4// Multi-vector sequence constraints5 6mova {z1.d-z2.d}, za.d[w12]7// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid vector list, expected list with 2 consecutive SVE vectors, where the first vector is a multiple of 2 and with matching element types8// CHECK-NEXT: mova {z1.d-z2.d}, za.d[w12]9// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:10 11mova {z1.d-z4.d}, za.d[w12]12// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: Invalid vector list, expected list with 4 consecutive SVE vectors, where the first vector is a multiple of 4 and with matching element types13// CHECK-NEXT: mova {z1.d-z4.d}, za.d[w12]14// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:15 16// --------------------------------------------------------------------------//17// Invalid index offset18 19mova {z0.s, z1.s}, za0h.s[w12, 1:2]20// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector select offset must be an immediate range of the form <immf>:<imml>, where the first immediate is a multiple of 2 in the range [0, 2], and the second immediate is immf + 1.21// CHECK-NEXT: mova {z0.s, z1.s}, za0h.s[w12, 1:2]22// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:23 24mova {z0.s, z1.s}, za0h.s[w12, 3:4]25// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector select offset must be an immediate range of the form <immf>:<imml>, where the first immediate is a multiple of 2 in the range [0, 2], and the second immediate is immf + 1.26// CHECK-NEXT: mova {z0.s, z1.s}, za0h.s[w12, 3:4]27// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:28 29mova {z0.s, z1.s}, za0h.s[w12, 0:2]30// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction31// CHECK-NEXT: mova {z0.s, z1.s}, za0h.s[w12, 0:2]32// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:33 34mova    {z20.d-z21.d}, za2h.d[w14, 0:3]35// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction36// CHECK-NEXT: mova    {z20.d-z21.d}, za2h.d[w14, 0:3]37// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:38 39mova    {z16.s-z19.s}, za1h.s[w14, 0:1]40// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction41// CHECK-NEXT: mova    {z16.s-z19.s}, za1h.s[w14, 0:1]42// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:43 44// --------------------------------------------------------------------------//45// Invalid index (expected range)46 47mova {z0.b-z3.b}, za0h.b[w13, 0]48// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction49// CHECK-NEXT: mova {z0.b-z3.b}, za0h.b[w13, 0]50// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:51 52// --------------------------------------------------------------------------//53// Operands are not consistent54 55mova za.h[w8, 0], {z0.s-z3.s}56// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction57// CHECK-NEXT: mova za.h[w8, 0], {z0.s-z3.s}58// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:59 60mov za.h[w8, 0], {z0.s-z3.s}61// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction62// CHECK-NEXT:mov za.h[w8, 0], {z0.s-z3.s}63// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:64 65mova {z0.s-z3.s}, za.b[w8, 0]66// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid matrix operand, expected suffix .s67// CHECK-NEXT: mova {z0.s-z3.s}, za.b[w8, 0]68// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:69 70mov {z0.h-z3.h}, za.d[w8, 0]71// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid matrix operand, expected suffix .h72// CHECK-NEXT: mov {z0.h-z3.h}, za.d[w8, 0]73// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:74 75 76// --------------------------------------------------------------------------//77// Tile-to-vector and vector-to-tile should not accept the VG suffix78 79mov za0h.b[w12, 0:1, vgx2], { z0.b, z1.b }80// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction81// CHECK-NEXT: mov za0h.b[w12, 0:1, vgx2], { z0.b, z1.b }82// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:83 84mov { z0.b, z1.b }, za0h.b[w12, 0:1, vgx2]85// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction86// CHECK-NEXT: mov { z0.b, z1.b }, za0h.b[w12, 0:1, vgx2]87// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:88 89mov za0h.b[w12, 0:3, vgx4], { z0.b - z3.b }90// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction91// CHECK-NEXT: mov za0h.b[w12, 0:3, vgx4], { z0.b - z3.b }92// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:93 94mov { z0.b - z3.b }, za0h.b[w12, 0:3, vgx4]95// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction96// CHECK-NEXT: mov { z0.b - z3.b }, za0h.b[w12, 0:3, vgx4]97// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:98 99mova za0h.b[w12, 0:1, vgx2], { z0.b, z1.b }100// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction101// CHECK-NEXT: mova za0h.b[w12, 0:1, vgx2], { z0.b, z1.b }102// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:103 104mova { z0.b, z1.b }, za0h.b[w12, 0:1, vgx2]105// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction106// CHECK-NEXT: mova { z0.b, z1.b }, za0h.b[w12, 0:1, vgx2]107// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:108 109mova za0h.b[w12, 0:3, vgx4], { z0.b - z3.b }110// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction111// CHECK-NEXT: mova za0h.b[w12, 0:3, vgx4], { z0.b - z3.b }112// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:113 114mova { z0.b - z3.b }, za0h.b[w12, 0:3, vgx4]115// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction116// CHECK-NEXT: mova { z0.b - z3.b }, za0h.b[w12, 0:3, vgx4]117// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:118