Home | History | Annotate | Download | only in SVE
      1 // RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve  2>&1 < %s| FileCheck %s
      2 
      3 
      4 // --------------------------------------------------------------------------//
      5 // invalid/missing predicate operation specifier
      6 
      7 prfw p0, [x0]
      8 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: prefetch hint expected
      9 // CHECK-NEXT: prfw p0, [x0]
     10 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     11 
     12 prfw #16, p0, [x0]
     13 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: prefetch operand out of range, [0,15] expected
     14 // CHECK-NEXT: prfw #16, p0, [x0]
     15 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     16 
     17 prfw plil1keep, p0, [x0]
     18 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: prefetch hint expected
     19 // CHECK-NEXT: prfw plil1keep, p0, [x0]
     20 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     21 
     22 prfw #pldl1keep, p0, [x0]
     23 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate value expected for prefetch operand
     24 // CHECK-NEXT: prfw #pldl1keep, p0, [x0]
     25 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     26 
     27 
     28 // --------------------------------------------------------------------------//
     29 // invalid scalar + scalar addressing modes
     30 
     31 prfw #0, p0, [x0, #-33, mul vl]
     32 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-32, 31].
     33 // CHECK-NEXT: prfw #0, p0, [x0, #-33, mul vl]
     34 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     35 
     36 prfw #0, p0, [x0, #32, mul vl]
     37 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be an integer in range [-32, 31].
     38 // CHECK-NEXT: prfw #0, p0, [x0, #32, mul vl]
     39 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     40 
     41 prfw #0, p0, [x0, w0]
     42 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: register must be x0..x30 with required shift 'lsl #2'
     43 // CHECK-NEXT: prfw #0, p0, [x0, w0]
     44 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     45 
     46 prfw #0, p0, [x0, x0, uxtw]
     47 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: register must be x0..x30 with required shift 'lsl #2'
     48 // CHECK-NEXT: prfw #0, p0, [x0, x0, uxtw]
     49 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     50 
     51 prfw #0, p0, [x0, x0, lsl #1]
     52 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: register must be x0..x30 with required shift 'lsl #2'
     53 // CHECK-NEXT: prfw #0, p0, [x0, x0, lsl #1]
     54 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     55 
     56 
     57 // --------------------------------------------------------------------------//
     58 // Invalid scalar + vector addressing modes
     59 
     60 prfw #0, p0, [x0, z0.h]
     61 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand
     62 // CHECK-NEXT: prfw #0, p0, [x0, z0.h]
     63 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     64 
     65 prfw #0, p0, [x0, z0.s]
     66 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid shift/extend specified, expected 'z[0..31].s, (uxtw|sxtw) #2'
     67 // CHECK-NEXT: prfw #0, p0, [x0, z0.s]
     68 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     69 
     70 prfw #0, p0, [x0, z0.s]
     71 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid shift/extend specified, expected 'z[0..31].s, (uxtw|sxtw) #2'
     72 // CHECK-NEXT: prfw #0, p0, [x0, z0.s]
     73 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     74 
     75 prfw #0, p0, [x0, z0.s, uxtw #3]
     76 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid shift/extend specified, expected 'z[0..31].s, (uxtw|sxtw) #2'
     77 // CHECK-NEXT: prfw #0, p0, [x0, z0.s, uxtw #3]
     78 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     79 
     80 prfw #0, p0, [x0, z0.s, lsl #2]
     81 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid shift/extend specified, expected 'z[0..31].s, (uxtw|sxtw) #2'
     82 // CHECK-NEXT: prfw #0, p0, [x0, z0.s, lsl #2]
     83 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     84 
     85 prfw #0, p0, [x0, z0.d, lsl #3]
     86 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid shift/extend specified, expected 'z[0..31].d, (lsl|uxtw|sxtw) #2'
     87 // CHECK-NEXT: prfw #0, p0, [x0, z0.d, lsl #3]
     88 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     89 
     90 prfw #0, p0, [x0, z0.d, sxtw #3]
     91 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid shift/extend specified, expected 'z[0..31].d, (lsl|uxtw|sxtw) #2'
     92 // CHECK-NEXT: prfw #0, p0, [x0, z0.d, sxtw #3]
     93 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
     94 
     95 
     96 // --------------------------------------------------------------------------//
     97 // Invalid vector + immediate addressing modes
     98 
     99 prfw #0, p0, [z0.s, #-4]
    100 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].
    101 // CHECK-NEXT: prfw #0, p0, [z0.s, #-4]
    102 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    103 
    104 prfw #0, p0, [z0.s, #-1]
    105 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].
    106 // CHECK-NEXT: prfw #0, p0, [z0.s, #-1]
    107 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    108 
    109 prfw #0, p0, [z0.s, #125]
    110 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].
    111 // CHECK-NEXT: prfw #0, p0, [z0.s, #125]
    112 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    113 
    114 prfw #0, p0, [z0.s, #128]
    115 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].
    116 // CHECK-NEXT: prfw #0, p0, [z0.s, #128]
    117 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    118 
    119 prfw #0, p0, [z0.s, #3]
    120 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].
    121 // CHECK-NEXT: prfw #0, p0, [z0.s, #3]
    122 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    123 
    124 prfw #0, p0, [z0.d, #-4]
    125 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].
    126 // CHECK-NEXT: prfw #0, p0, [z0.d, #-4]
    127 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    128 
    129 prfw #0, p0, [z0.d, #-1]
    130 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].
    131 // CHECK-NEXT: prfw #0, p0, [z0.d, #-1]
    132 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    133 
    134 prfw #0, p0, [z0.d, #125]
    135 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].
    136 // CHECK-NEXT: prfw #0, p0, [z0.d, #125]
    137 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    138 
    139 prfw #0, p0, [z0.d, #128]
    140 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].
    141 // CHECK-NEXT: prfw #0, p0, [z0.d, #128]
    142 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    143 
    144 prfw #0, p0, [z0.d, #3]
    145 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: index must be a multiple of 4 in range [0, 124].
    146 // CHECK-NEXT: prfw #0, p0, [z0.d, #3]
    147 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    148 
    149 
    150 // --------------------------------------------------------------------------//
    151 // invalid predicate
    152 
    153 prfw #0, p8, [x0]
    154 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: restricted predicate has range [0, 7].
    155 // CHECK-NEXT: prfw #0, p8, [x0]
    156 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    157 
    158 
    159 // --------------------------------------------------------------------------//
    160 // Negative tests for instructions that are incompatible with movprfx
    161 
    162 movprfx z8.d, p3/z, z15.d
    163 prfw    #7, p3, [x13, z8.d, uxtw #2]
    164 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
    165 // CHECK-NEXT: prfw    #7, p3, [x13, z8.d, uxtw #2]
    166 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    167 
    168 movprfx z8, z15
    169 prfw    #7, p3, [x13, z8.d, uxtw #2]
    170 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
    171 // CHECK-NEXT: prfw    #7, p3, [x13, z8.d, uxtw #2]
    172 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    173 
    174 movprfx z21.d, p5/z, z28.d
    175 prfw    pldl3strm, p5, [x10, z21.d, lsl #2]
    176 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
    177 // CHECK-NEXT: prfw    pldl3strm, p5, [x10, z21.d, lsl #2]
    178 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    179 
    180 movprfx z21, z28
    181 prfw    pldl3strm, p5, [x10, z21.d, lsl #2]
    182 // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov
    183 // CHECK-NEXT: prfw    pldl3strm, p5, [x10, z21.d, lsl #2]
    184 // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
    185