diff options
author | Dmitry Preobrazhensky <dmitry.preobrazhensky@amd.com> | 2019-05-22 13:59:01 +0000 |
---|---|---|
committer | Dmitry Preobrazhensky <dmitry.preobrazhensky@amd.com> | 2019-05-22 13:59:01 +0000 |
commit | 7773fc478d326bd8362024de698e84d1dc6082bd (patch) | |
tree | 69df19058f34128ca781b9a2d12a00735d62f43e /llvm/test/MC/AMDGPU | |
parent | b9274f26949810ac60c59efe0fc9b1d2518ec1cf (diff) | |
download | bcm5719-llvm-7773fc478d326bd8362024de698e84d1dc6082bd.tar.gz bcm5719-llvm-7773fc478d326bd8362024de698e84d1dc6082bd.zip |
[AMDGPU][MC] Corrected parsing of op_sel* and neg_* modifiers
See bug 41361: https://bugs.llvm.org/show_bug.cgi?id=41361
Reviewers: artem.tamazov, arsenm
Differential Revision: https://reviews.llvm.org/D61012
llvm-svn: 361386
Diffstat (limited to 'llvm/test/MC/AMDGPU')
-rw-r--r-- | llvm/test/MC/AMDGPU/dl-insts-err.s | 130 | ||||
-rw-r--r-- | llvm/test/MC/AMDGPU/expressions-gfx9.s | 31 | ||||
-rw-r--r-- | llvm/test/MC/AMDGPU/vop3p-err.s | 38 |
3 files changed, 121 insertions, 78 deletions
diff --git a/llvm/test/MC/AMDGPU/dl-insts-err.s b/llvm/test/MC/AMDGPU/dl-insts-err.s index 98ab5b7eb9c..a6ebde52874 100644 --- a/llvm/test/MC/AMDGPU/dl-insts-err.s +++ b/llvm/test/MC/AMDGPU/dl-insts-err.s @@ -29,19 +29,19 @@ v_dot8_u32_u4 v0, v1, v2, v3 // Test invalid operands. // -// GFX906: error: failed parsing operand +// GFX906: error: invalid operand for instruction v_dot2_f32_f16 v0, v1, v2, v3 op_sel -// GFX906: error: failed parsing operand +// GFX906: error: expected a left square bracket v_dot2_f32_f16 v0, v1, v2, v3 op_sel: -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[ -// GFX906: error: failed parsing operand +// GFX906: error: expected a left square bracket v_dot2_f32_f16 v0, v1, v2, v3 op_sel:] -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[] -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[,] -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[,0] // GFX906: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[0,2] @@ -55,21 +55,21 @@ v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[0,-1] v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[-1,0] // GFX906: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[-1,-1] -// GFX906: error: failed parsing operand +// GFX906: error: expected a closing square bracket v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[0,0,0,0,0] -// GFX906: error: failed parsing operand +// GFX906: error: invalid operand for instruction v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi -// GFX906: error: failed parsing operand +// GFX906: error: expected a left square bracket v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi: -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[ -// GFX906: error: failed parsing operand +// GFX906: error: expected a left square bracket v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:] -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[] -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[,] -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[,0] // GFX906: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[0,2] @@ -83,21 +83,21 @@ v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[0,-1] v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[-1,0] // GFX906: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[-1,-1] -// GFX906: error: failed parsing operand +// GFX906: error: expected a closing square bracket v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[0,0,0,0,0] -// GFX906: error: failed parsing operand +// GFX906: error: invalid operand for instruction v_dot2_f32_f16 v0, v1, v2, v3 neg_lo -// GFX906: error: failed parsing operand +// GFX906: error: expected a left square bracket v_dot2_f32_f16 v0, v1, v2, v3 neg_lo: -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[ -// GFX906: error: failed parsing operand +// GFX906: error: expected a left square bracket v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:] -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[] -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[,] -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[,0] // GFX906: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[0,2] @@ -111,21 +111,21 @@ v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[0,-1] v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[-1,0] // GFX906: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[-1,-1] -// GFX906: error: failed parsing operand +// GFX906: error: expected a closing square bracket v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[0,0,0,0,0] -// GFX906: error: failed parsing operand +// GFX906: error: invalid operand for instruction v_dot2_f32_f16 v0, v1, v2, v3 neg_hi -// GFX906: error: failed parsing operand +// GFX906: error: expected a left square bracket v_dot2_f32_f16 v0, v1, v2, v3 neg_hi: -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[ -// GFX906: error: failed parsing operand +// GFX906: error: expected a left square bracket v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:] -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[] -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[,] -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[,0] // GFX906: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[0,2] @@ -139,21 +139,21 @@ v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[0,-1] v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[-1,0] // GFX906: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[-1,-1] -// GFX906: error: failed parsing operand +// GFX906: error: expected a closing square bracket v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[0,0,0,0,0] -// GFX906: error: failed parsing operand +// GFX906: error: invalid operand for instruction v_dot2_i32_i16 v0, v1, v2, v3 op_sel -// GFX906: error: failed parsing operand +// GFX906: error: expected a left square bracket v_dot2_i32_i16 v0, v1, v2, v3 op_sel: -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[ -// GFX906: error: failed parsing operand +// GFX906: error: expected a left square bracket v_dot2_i32_i16 v0, v1, v2, v3 op_sel:] -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[] -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[,] -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[,0] // GFX906: error: failed parsing operand v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[0,2] @@ -167,21 +167,21 @@ v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[0,-1] v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[-1,0] // GFX906: error: failed parsing operand v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[-1,-1] -// GFX906: error: failed parsing operand +// GFX906: error: expected a closing square bracket v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[0,0,0,0,0] -// GFX906: error: failed parsing operand +// GFX906: error: invalid operand for instruction v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi -// GFX906: error: failed parsing operand +// GFX906: error: expected a left square bracket v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi: -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[ -// GFX906: error: failed parsing operand +// GFX906: error: expected a left square bracket v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:] -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[] -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[,] -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[,0] // GFX906: error: failed parsing operand v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[0,2] @@ -195,25 +195,25 @@ v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[0,-1] v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[-1,0] // GFX906: error: failed parsing operand v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[-1,-1] -// GFX906: error: failed parsing operand +// GFX906: error: expected a closing square bracket v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[0,0,0,0,0] // FIXME-GFX906: error: invalid operand for instruction v_dot2_i32_i16 v0, v1, v2, v3 neg_lo:[0,0] // FIXME-GFX906: error: invalid operand for instruction v_dot2_i32_i16 v0, v1, v2, v3 neg_hi:[0,0] -// GFX906: error: failed parsing operand +// GFX906: error: invalid operand for instruction v_dot2_u32_u16 v0, v1, v2, v3 op_sel -// GFX906: error: failed parsing operand +// GFX906: error: expected a left square bracket v_dot2_u32_u16 v0, v1, v2, v3 op_sel: -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[ -// GFX906: error: failed parsing operand +// GFX906: error: expected a left square bracket v_dot2_u32_u16 v0, v1, v2, v3 op_sel:] -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[] -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[,] -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[,0] // GFX906: error: failed parsing operand v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[0,2] @@ -227,23 +227,23 @@ v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[0,-1] v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[-1,0] // GFX906: error: failed parsing operand v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[-1,-1] -// GFX906: error: failed parsing operand +// GFX906: error: expected a closing square bracket v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[0,0,0,0,0] -// GFX906: error: failed parsing operand +// GFX906: error: invalid operand for instruction v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi -// GFX906: error: failed parsing operand +// GFX906: error: expected a left square bracket v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi: -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[ -// GFX906: error: failed parsing operand +// GFX906: error: expected a left square bracket v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:] -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[] -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[,] -// GFX906: error: failed parsing operand +// GFX906: error: unknown token in expression v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[,0] -// GFX906: error: failed parsing operand +// GFX906: error: invalid op_sel_hi value v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[0,2] // GFX906: error: failed parsing operand v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[2,0] @@ -255,7 +255,7 @@ v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[0,-1] v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[-1,0] // GFX906: error: failed parsing operand v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[-1,-1] -// GFX906: error: failed parsing operand +// GFX906: error: expected a closing square bracket v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[0,0,0,0,0] // FIXME-GFX906: error: invalid operand for instruction v_dot2_u32_u16 v0, v1, v2, v3 neg_lo:[0,0] diff --git a/llvm/test/MC/AMDGPU/expressions-gfx9.s b/llvm/test/MC/AMDGPU/expressions-gfx9.s new file mode 100644 index 00000000000..b1be72b019a --- /dev/null +++ b/llvm/test/MC/AMDGPU/expressions-gfx9.s @@ -0,0 +1,31 @@ +// RUN: not llvm-mc -arch=amdgcn -mcpu=gfx900 -show-encoding %s | FileCheck %s --check-prefix=GFX9 +// RUN: not llvm-mc -arch=amdgcn -mcpu=gfx900 -show-encoding %s 2>&1 | FileCheck %s --check-prefix=NOGFX9 + +//===----------------------------------------------------------------------===// +// Relocatable expressions cannot be used with SDWA modifiers. +//===----------------------------------------------------------------------===// + +v_mov_b32_sdwa v1, sext(u) +// NOGFX9: error: expected an absolute expression + +//===----------------------------------------------------------------------===// +// Constant expressions may be used with 'sext' modifier +//===----------------------------------------------------------------------===// + +i1=1 + +v_mov_b32_sdwa v1, sext(i1-2) +// GFX9: v_mov_b32_sdwa v1, sext(-1) dst_sel:DWORD dst_unused:UNUSED_PRESERVE src0_sel:DWORD ; encoding: [0xf9,0x02,0x02,0x7e,0xc1,0x16,0x8e,0x00] + +v_mov_b32_sdwa v1, sext(-2+i1) +// GFX9: v_mov_b32_sdwa v1, sext(-1) dst_sel:DWORD dst_unused:UNUSED_PRESERVE src0_sel:DWORD ; encoding: [0xf9,0x02,0x02,0x7e,0xc1,0x16,0x8e,0x00] + +//===----------------------------------------------------------------------===// +// Constant expressions may be used with op_sel* and neg_* modifiers. +//===----------------------------------------------------------------------===// + +v_pk_add_u16 v1, v2, v3 op_sel:[2-i1,i1-1] +// GFX9: v_pk_add_u16 v1, v2, v3 op_sel:[1,0] ; encoding: [0x01,0x08,0x8a,0xd3,0x02,0x07,0x02,0x18] + +v_pk_add_u16 v1, v2, v3 neg_lo:[2-i1,i1-1] +// GFX9: v_pk_add_u16 v1, v2, v3 neg_lo:[1,0] ; encoding: [0x01,0x00,0x8a,0xd3,0x02,0x07,0x02,0x38] diff --git a/llvm/test/MC/AMDGPU/vop3p-err.s b/llvm/test/MC/AMDGPU/vop3p-err.s index 6605bec7234..9dfd28a4b9f 100644 --- a/llvm/test/MC/AMDGPU/vop3p-err.s +++ b/llvm/test/MC/AMDGPU/vop3p-err.s @@ -1,42 +1,54 @@ // RUN: not llvm-mc -arch=amdgcn -mcpu=gfx900 -show-encoding %s 2>&1 | FileCheck -check-prefix=GFX9 %s -// GFX9: 31: error: failed parsing operand. +// GFX9: 25: error: invalid operand for instruction v_pk_add_u16 v1, v2, v3 op_sel -// GFX9: 32: error: failed parsing operand. +// GFX9: 32: error: expected a left square bracket v_pk_add_u16 v1, v2, v3 op_sel: -// GFX9: 33: error: failed parsing operand. +// GFX9: 33: error: unknown token in expression v_pk_add_u16 v1, v2, v3 op_sel:[ -// GFX9: 33: error: failed parsing operand. +// GFX9: 33: error: unknown token in expression v_pk_add_u16 v1, v2, v3 op_sel:[] -// GFX9: 34: error: failed parsing operand. +// GFX9: 33: error: unknown token in expression v_pk_add_u16 v1, v2, v3 op_sel:[,] // XXGFX9: 34: error: failed parsing operand. // v_pk_add_u16 v1, v2, v3 op_sel:[0] -// GFX9: 35: error: failed parsing operand. +// GFX9: 35: error: expected a comma +v_pk_add_u16 v1, v2, v3 op_sel:[0 0] + +// GFX9: 35: error: unknown token in expression v_pk_add_u16 v1, v2, v3 op_sel:[0,] -// XXGFX9: 36: error: failed parsing operand. -// v_pk_add_u16 v1, v2, v3 op_sel:[,0] +// GFX9: 33: error: unknown token in expression +v_pk_add_u16 v1, v2, v3 op_sel:[,0] + +// GFX9: 42: error: expected a closing square bracket +v_max3_f16 v5, v1, v2, v3 op_sel:[1,1,1,1, + +// GFX9: 42: error: expected a closing square bracket +v_max3_f16 v5, v1, v2, v3 op_sel:[1,1,1,1[ + +// GFX9: 43: error: expected a closing square bracket +v_max3_f16 v5, v1, v2, v3 op_sel:[1,1,1,1 1 -// GFX9: 36: error: failed parsing operand. +// GFX9: 35: error: invalid op_sel value. v_pk_add_u16 v1, v2, v3 op_sel:[0,2] -// GFX9: 35: error: failed parsing operand. +// GFX9: 33: error: invalid op_sel value. v_pk_add_u16 v1, v2, v3 op_sel:[2,0] -// GFX9: 33: error: failed parsing operand. +// GFX9: 33: error: invalid op_sel value. v_pk_add_u16 v1, v2, v3 op_sel:[-1,0] -// GFX9: 35: error: failed parsing operand. +// GFX9: 35: error: invalid op_sel value. v_pk_add_u16 v1, v2, v3 op_sel:[0,-1] -// GFX9: 42: error: failed parsing operand. +// GFX9: 40: error: expected a closing square bracket v_pk_add_u16 v1, v2, v3 op_sel:[0,0,0,0,0] // XXGFX9: invalid operand for instruction |