brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.5 KiB · 3eb8333 Raw
223 lines · plain
1// RUN: not llvm-mc -triple=aarch64-none-linux-gnu -show-encoding -mattr=+sve  2>&1 < %s | FileCheck %s2 3// ------------------------------------------------------------------------- //4// Type suffix on unpredicated movprfx5 6movprfx z0.b, z1.b7// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction8// CHECK-NEXT: movprfx z0.b, z1.b9// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:10 11movprfx z0.b, z1.s12// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction13// CHECK-NEXT: movprfx z0.b, z1.s14// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:15 16movprfx z0, z1.s17// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: expected register without element width suffix18// CHECK-NEXT: movprfx z0, z1.s19// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:20 21 22// ------------------------------------------------------------------------- //23// Different destination register (unary)24 25movprfx z0, z126abs z2.d, p0/m, z2.d27// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx writing to a different destination28// CHECK-NEXT: abs z2.d, p0/m, z2.d29// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:30 31 32// ------------------------------------------------------------------------- //33// Different destination register (binary)34 35movprfx z0, z136add z2.d, p0/m, z2.d, z0.d37// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx writing to a different destination38// CHECK-NEXT: add z2.d, p0/m, z2.d, z0.d39// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:40 41 42// ------------------------------------------------------------------------- //43// Different destination register (wide element)44 45movprfx z0, z146asr z2.s, p0/m, z2.s, z0.d47// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx writing to a different destination48// CHECK-NEXT: asr z2.s, p0/m, z2.s, z0.d49// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:50 51 52// ------------------------------------------------------------------------- //53// Different destination register (ternary)54 55movprfx z0, z156mla z3.d, p0/m, z1.d, z2.d57// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx writing to a different destination58// CHECK-NEXT: mla z3.d, p0/m, z1.d, z2.d59// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:60 61 62// ------------------------------------------------------------------------- //63// Destination used in other operand (unary)64 65movprfx z0, z166abs z0.d, p0/m, z0.d67// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx and destination also used as non-destructive source68// CHECK-NEXT: abs z0.d, p0/m, z0.d69// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:70 71movprfx z0.d, p0/z, z1.d72cpy z0.d, p0/m, d073// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx and destination also used as non-destructive source74// CHECK-NEXT: cpy z0.d, p0/m, d075// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:76 77movprfx z0.d, p0/z, z1.d78mov z0.d, p0/m, d079// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx and destination also used as non-destructive source80// CHECK-NEXT: mov z0.d, p0/m, d081// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:82 83// ------------------------------------------------------------------------- //84// Destination used in other operand (binary)85 86movprfx z0, z187add z0.d, p0/m, z0.d, z0.d88// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx and destination also used as non-destructive source89// CHECK-NEXT: add z0.d, p0/m, z0.d, z0.d90// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:91 92 93// ------------------------------------------------------------------------- //94// Destination used in other operand (wide element)95 96movprfx z0, z197asr z0.s, p0/m, z0.s, z0.d98// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx and destination also used as non-destructive source99// CHECK-NEXT: asr z0.s, p0/m, z0.s, z0.d100// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:101 102 103// ------------------------------------------------------------------------- //104// Destination used in other operand (ternary)105 106movprfx z0, z1107mla z0.d, p0/m, z0.d, z2.d108// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx and destination also used as non-destructive source109// CHECK-NEXT: mla z0.d, p0/m, z0.d, z2.d110// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:111 112 113// ------------------------------------------------------------------------- //114// Destination used in other operand (ternary + indexed)115 116movprfx z0, z1117sdot z0.s, z1.b, z0.b[3]118// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx and destination also used as non-destructive source119// CHECK-NEXT: sdot z0.s, z1.b, z0.b[3]120// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:121 122 123// ------------------------------------------------------------------------- //124// Different general predicate (unary)125 126movprfx z0.d, p0/m, z1.d127abs z0.d, p1/m, z1.d128// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a predicated movprfx using a different general predicate129// CHECK-NEXT: abs z0.d, p1/m, z1.d130// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:131 132 133// ------------------------------------------------------------------------- //134// Different general predicate (binary)135 136movprfx z0.d, p0/m, z1.d137add z0.d, p1/m, z0.d, z1.d138// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a predicated movprfx using a different general predicate139// CHECK-NEXT: add z0.d, p1/m, z0.d, z1.d140// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:141 142 143// ------------------------------------------------------------------------- //144// Different general predicate (wide element)145 146movprfx z0.d, p0/m, z1.d147asr z0.s, p1/m, z0.s, z1.d148// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a predicated movprfx using a different general predicate149// CHECK-NEXT: asr z0.s, p1/m, z0.s, z1.d150// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:151 152 153// ------------------------------------------------------------------------- //154// Different general predicate (ternary)155 156movprfx z0.d, p0/m, z1.d157mla z0.d, p1/m, z1.d, z2.d158// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a predicated movprfx using a different general predicate159// CHECK-NEXT: mla z0.d, p1/m, z1.d, z2.d160// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:161 162 163// ------------------------------------------------------------------------- //164// Different element size (unary)165 166movprfx z0.s, p0/m, z1.s167abs z0.d, p0/m, z1.d168// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a predicated movprfx with a different element size169// CHECK-NEXT: abs z0.d, p0/m, z1.d170// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:171 172 173// ------------------------------------------------------------------------- //174// Different element size (binary)175 176movprfx z0.s, p0/m, z1.s177add z0.d, p0/m, z0.d, z1.d178// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a predicated movprfx with a different element size179// CHECK-NEXT: add z0.d, p0/m, z0.d, z1.d180// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:181 182 183// ------------------------------------------------------------------------- //184// Different element size (wide element)185 186movprfx z0.d, p0/m, z1.d187asr z0.s, p0/m, z0.s, z1.d188// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a predicated movprfx with a different element size189// CHECK-NEXT: asr z0.s, p0/m, z0.s, z1.d190// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:191 192 193// ------------------------------------------------------------------------- //194// Different element size (ternary)195 196movprfx z0.s, p0/m, z1.s197mla z0.d, p0/m, z1.d, z2.d198// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a predicated movprfx with a different element size199// CHECK-NEXT: mla z0.d, p0/m, z1.d, z2.d200// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:201 202 203// ------------------------------------------------------------------------- //204// Predicated movprfx with non-predicated instruction.205 206movprfx z0.d, p0/m, z1.d207add z0.d, z0.d, #1208// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a predicated movprfx, suggest using unpredicated movprfx209// CHECK-NEXT: add z0.d, z0.d, #1210// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:211 212 213// ------------------------------------------------------------------------- //214// Ensure we don't try to apply a prefix to subsequent instructions (upon failure)215 216movprfx z0, z1217add z0.d, z1.d, z2.d218add z0.d, z1.d, z2.d219// CHECK: [[@LINE-2]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov220// CHECK-NEXT: add z0.d, z1.d, z2.d221// CHECK-NOT: [[@LINE-3]]:{{[0-9]+}}:222// CHECK: add z0.d, z1.d, z2.d223