1// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve 2>&1 < %s| FileCheck %s 2 3lsl z18.b, z28.b, #-1 4// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7] 5// CHECK-NEXT: lsl z18.b, z28.b, #-1 6// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 7 8lsl z1.b, z9.b, #8 9// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7] 10// CHECK-NEXT: lsl z1.b, z9.b, #8 11// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 12 13lsl z18.b, p0/m, z28.b, #-1 14// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7] 15// CHECK-NEXT: lsl z18.b, p0/m, z28.b, #-1 16// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 17 18lsl z1.b, p0/m, z9.b, #8 19// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7] 20// CHECK-NEXT: lsl z1.b, p0/m, z9.b, #8 21// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 22 23lsl z21.h, z2.h, #-1 24// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 15] 25// CHECK-NEXT: lsl z21.h, z2.h, #-1 26// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 27 28lsl z14.h, z30.h, #16 29// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 15] 30// CHECK-NEXT: lsl z14.h, z30.h, #16 31// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 32 33lsl z21.h, p0/m, z2.h, #-1 34// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 15] 35// CHECK-NEXT: lsl z21.h, p0/m, z2.h, #-1 36// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 37 38lsl z14.h, p0/m, z30.h, #16 39// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 15] 40// CHECK-NEXT: lsl z14.h, p0/m, z30.h, #16 41// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 42 43lsl z6.s, z12.s, #-1 44// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 31] 45// CHECK-NEXT: lsl z6.s, z12.s, #-1 46// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 47 48lsl z23.s, z19.s, #32 49// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 31] 50// CHECK-NEXT: lsl z23.s, z19.s, #32 51// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 52 53lsl z6.s, p0/m, z12.s, #-1 54// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 31] 55// CHECK-NEXT: lsl z6.s, p0/m, z12.s, #-1 56// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 57 58lsl z23.s, p0/m, z19.s, #32 59// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 31] 60// CHECK-NEXT: lsl z23.s, p0/m, z19.s, #32 61// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 62 63lsl z3.d, z24.d, #-1 64// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 63] 65// CHECK-NEXT: lsl z3.d, z24.d, #-1 66// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 67 68lsl z25.d, z16.d, #64 69// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 63] 70// CHECK-NEXT: lsl z25.d, z16.d, #64 71// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 72 73lsl z3.d, p0/m, z24.d, #-1 74// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 63] 75// CHECK-NEXT: lsl z3.d, p0/m, z24.d, #-1 76// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 77 78lsl z25.d, p0/m, z16.d, #64 79// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 63] 80// CHECK-NEXT: lsl z25.d, p0/m, z16.d, #64 81// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 82 83 84// --------------------------------------------------------------------------// 85// Source and Destination Registers must match 86 87lsl z0.b, p0/m, z1.b, z2.b 88// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must match destination register 89// CHECK-NEXT: lsl z0.b, p0/m, z1.b, z2.b 90// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 91 92lsl z0.b, p0/m, z1.b, #1 93// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: operand must match destination register 94// CHECK-NEXT: lsl z0.b, p0/m, z1.b, #1 95// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 96 97 98// --------------------------------------------------------------------------// 99// Element sizes must match 100 101lsl z0.b, z0.d, z1.d 102// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width 103// CHECK-NEXT: lsl z0.b, z0.d, z1.d 104// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 105 106lsl z0.b, p0/m, z0.d, z1.d 107// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width 108// CHECK-NEXT: lsl z0.b, p0/m, z0.d, z1.d 109// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 110 111lsl z0.b, p0/m, z0.b, z1.h 112// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid element width 113// CHECK-NEXT: lsl z0.b, p0/m, z0.b, z1.h 114// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 115 116// --------------------------------------------------------------------------// 117// Predicate not in restricted predicate range 118 119lsl z0.b, p8/m, z0.b, z1.b 120// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid restricted predicate register, expected p0..p7 (without element suffix) 121// CHECK-NEXT: lsl z0.b, p8/m, z0.b, z1.b 122// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 123 124 125// --------------------------------------------------------------------------// 126// Negative tests for instructions that are incompatible with movprfx 127 128movprfx z31.d, p0/z, z6.d 129lsl z31.d, z31.d, #63 130// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov 131// CHECK-NEXT: lsl z31.d, z31.d, #63 132// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 133 134movprfx z31, z6 135lsl z31.d, z31.d, #63 136// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov 137// CHECK-NEXT: lsl z31.d, z31.d, #63 138// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 139 140movprfx z0.s, p0/z, z7.s 141lsl z0.s, z1.s, z2.d 142// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov 143// CHECK-NEXT: lsl z0.s, z1.s, z2.d 144// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 145 146movprfx z0, z7 147lsl z0.s, z1.s, z2.d 148// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov 149// CHECK-NEXT: lsl z0.s, z1.s, z2.d 150// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: 151