243 lines · plain
1// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=+sve 2>&1 < %s| FileCheck %s2 3// input should be a 64bit scalar register4dup z0.d, w05// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction6// CHECK-NEXT: dup z0.d, w07// CHECK-NOT: [[@LINE-3]]:{{[0-9]+}}:8 9// wzr is not a valid operand to dup10dup z0.s, wzr11// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction12// CHECK-NEXT: dup z0.s, wzr13// CHECK-NOT: [[@LINE-3]]:{{[0-9]+}}:14 15// xzr is not a valid operand to dup16dup z0.d, xzr17// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction18// CHECK-NEXT: dup z0.d, xzr19// CHECK-NOT: [[@LINE-3]]:{{[0-9]+}}:20 21 22// --------------------------------------------------------------------------//23// Invalid immediates24 25dup z0.b, #0, lsl #8 // #0, lsl #8 is not valid for .b26// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]27// CHECK-NEXT: dup z0.b, #0, lsl #828// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:29 30dup z0.b, #-1, lsl #831// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]32// CHECK-NEXT: dup z0.b, #-1, lsl #833// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:34 35dup z0.b, #25636// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]37// CHECK-NEXT: dup z0.b, #25638// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:39 40dup z0.b, #1, lsl #841// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 255]42// CHECK-NEXT: dup z0.b, #1, lsl #843// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:44 45dup z0.h, #-3276946// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]47// CHECK-NEXT: dup z0.h, #-3276948// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:49 50dup z0.h, #6528151// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]52// CHECK-NEXT: dup z0.h, #6528153// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:54 55dup z0.h, #6553656// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]57// CHECK-NEXT: dup z0.h, #6553658// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:59 60dup z0.h, #256, lsl #861// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 65280]62// CHECK-NEXT: dup z0.h, #256, lsl #863// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:64 65dup z0.s, #-3302466// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]67// CHECK-NEXT: dup z0.s, #-3302468// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:69 70dup z0.s, #-3276971// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]72// CHECK-NEXT: dup z0.s, #-3276973// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:74 75dup z0.s, #-129, lsl #876// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]77// CHECK-NEXT: dup z0.s, #-129, lsl #878// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:79 80dup z0.s, #3251381// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]82// CHECK-NEXT: dup z0.s, #3251383// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:84 85dup z0.s, #3276886// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]87// CHECK-NEXT: dup z0.s, #3276888// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:89 90dup z0.s, #128, lsl #891// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]92// CHECK-NEXT: dup z0.s, #128, lsl #893// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:94 95dup z0.d, #-3302496// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]97// CHECK-NEXT: dup z0.d, #-3302498// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:99 100dup z0.d, #-32769101// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]102// CHECK-NEXT: dup z0.d, #-32769103// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:104 105dup z0.d, #-129, lsl #8106// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]107// CHECK-NEXT: dup z0.d, #-129, lsl #8108// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:109 110dup z0.d, #32513111// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]112// CHECK-NEXT: dup z0.d, #32513113// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:114 115dup z0.d, #32768116// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]117// CHECK-NEXT: dup z0.d, #32768118// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:119 120dup z0.d, #128, lsl #8121// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]122// CHECK-NEXT: dup z0.d, #128, lsl #8123// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:124 125 126// --------------------------------------------------------------------------//127// Immediate not compatible with encode/decode function.128 129dup z0.b, b0130// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction131// CHECK-NEXT: dup z0.b, b0132// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:133 134dup z0.h, h0135// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction136// CHECK-NEXT: dup z0.h, h0137// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:138 139dup z0.s, s0140// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction141// CHECK-NEXT: dup z0.s, s0142// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:143 144dup z0.d, d0145// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction146// CHECK-NEXT: dup z0.d, d0147// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:148 149dup z0.q, q0150// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction151// CHECK-NEXT: dup z0.q, q0152// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:153 154dup z24.b, z17.b[-1]155// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 63].156// CHECK-NEXT: dup z24.b, z17.b[-1]157// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:158 159dup z17.b, z5.b[64]160// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 63].161// CHECK-NEXT: dup z17.b, z5.b[64]162// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:163 164dup z16.h, z30.h[-1]165// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 31].166// CHECK-NEXT: dup z16.h, z30.h[-1]167// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:168 169dup z19.h, z23.h[32]170// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 31].171// CHECK-NEXT: dup z19.h, z23.h[32]172// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:173 174dup z1.s, z6.s[-1]175// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 15].176// CHECK-NEXT: dup z1.s, z6.s[-1]177// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:178 179dup z24.s, z3.s[16]180// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 15].181// CHECK-NEXT: dup z24.s, z3.s[16]182// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:183 184dup z5.d, z25.d[-1]185// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7].186// CHECK-NEXT: dup z5.d, z25.d[-1]187// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:188 189dup z12.d, z28.d[8]190// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 7].191// CHECK-NEXT: dup z12.d, z28.d[8]192// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:193 194dup z22.q, z7.q[-1]195// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3].196// CHECK-NEXT: dup z22.q, z7.q[-1]197// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:198 199dup z24.q, z21.q[4]200// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: vector lane must be an integer in range [0, 3].201// CHECK-NEXT: dup z24.q, z21.q[4]202// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:203 204 205// --------------------------------------------------------------------------//206// Negative tests for instructions that are incompatible with movprfx207 208movprfx z31.b, p0/z, z6.b209dup z31.b, wsp210// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov211// CHECK-NEXT: dup z31.b, wsp212// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:213 214movprfx z31, z6215dup z31.b, wsp216// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov217// CHECK-NEXT: dup z31.b, wsp218// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:219 220movprfx z21.d, p0/z, z28.d221dup z21.d, #32512222// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov223// CHECK-NEXT: dup z21.d, #32512224// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:225 226movprfx z21, z28227dup z21.d, #32512228// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov229// CHECK-NEXT: dup z21.d, #32512230// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:231 232movprfx z31.d, p0/z, z6.d233dup z31.d, z31.d[7]234// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov235// CHECK-NEXT: dup z31.d, z31.d[7]236// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:237 238movprfx z31, z6239dup z31.d, z31.d[7]240// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: instruction is unpredictable when following a movprfx, suggest replacing movprfx with mov241// CHECK-NEXT: dup z31.d, z31.d[7]242// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:243