summaryrefslogtreecommitdiffstats
path: root/llvm/test/MC/AMDGPU
diff options
context:
space:
mode:
authorDmitry Preobrazhensky <dmitry.preobrazhensky@amd.com>2019-05-22 13:59:01 +0000
committerDmitry Preobrazhensky <dmitry.preobrazhensky@amd.com>2019-05-22 13:59:01 +0000
commit7773fc478d326bd8362024de698e84d1dc6082bd (patch)
tree69df19058f34128ca781b9a2d12a00735d62f43e /llvm/test/MC/AMDGPU
parentb9274f26949810ac60c59efe0fc9b1d2518ec1cf (diff)
downloadbcm5719-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.s130
-rw-r--r--llvm/test/MC/AMDGPU/expressions-gfx9.s31
-rw-r--r--llvm/test/MC/AMDGPU/vop3p-err.s38
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
OpenPOWER on IntegriCloud