From 94d040706d4a7a892714b48b6e13741081961b58 Mon Sep 17 00:00:00 2001 From: Dmitry Preobrazhensky Date: Fri, 4 Oct 2019 12:10:22 +0000 Subject: [PATCH] [AMDGPU][MC][GFX10] Corrected definition of FLAT GLOBAL/SCRATCH instructions See bug 43483: https://bugs.llvm.org/show_bug.cgi?id=43483 Reviewers: arsenm, rampitec Differential Revision: https://reviews.llvm.org/D68347 llvm-svn: 373736 --- llvm/lib/Target/AMDGPU/FLATInstructions.td | 2 +- .../MC/AMDGPU/flat-scratch-instructions.s | 20 +++++ .../MC/Disassembler/AMDGPU/flat_gfx10.txt | 75 +++++++++++++++++++ 3 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 llvm/test/MC/Disassembler/AMDGPU/flat_gfx10.txt diff --git a/llvm/lib/Target/AMDGPU/FLATInstructions.td b/llvm/lib/Target/AMDGPU/FLATInstructions.td index b76552d1b674..bda84a6d2c53 100644 --- a/llvm/lib/Target/AMDGPU/FLATInstructions.td +++ b/llvm/lib/Target/AMDGPU/FLATInstructions.td @@ -1184,7 +1184,7 @@ class FLAT_Real_gfx10 op, FLAT_Pseudo ps> : let AssemblerPredicate = isGFX10Plus; let DecoderNamespace = "GFX10"; - let Inst{11-0} = {offset{12}, offset{10-0}}; + let Inst{11-0} = offset{11-0}; let Inst{12} = !if(ps.has_dlc, dlc, ps.dlcValue); let Inst{54-48} = !if(ps.has_saddr, !if(ps.enabled_saddr, saddr, 0x7d), 0x7d); let Inst{55} = 0; diff --git a/llvm/test/MC/AMDGPU/flat-scratch-instructions.s b/llvm/test/MC/AMDGPU/flat-scratch-instructions.s index 3d1339023f42..c0e1670a6bd4 100644 --- a/llvm/test/MC/AMDGPU/flat-scratch-instructions.s +++ b/llvm/test/MC/AMDGPU/flat-scratch-instructions.s @@ -115,6 +115,26 @@ scratch_load_dword v1, v2, off offset:-4097 // GFX9-ERR: :32: error: expected a 13-bit signed offset // VI-ERR: :32: error: not a valid operand. +scratch_load_dword v0, v1, off offset:-2049 glc slc +// GFX10-ERR: :32: error: expected a 12-bit signed offset +// GFX9: scratch_load_dword v0, v1, off offset:-2049 glc slc ; encoding: [0xff,0x57,0x53,0xdc,0x01,0x00,0x7f,0x00] +// VI-ERR: :32: error: not a valid operand. + +scratch_load_dword v0, v1, off offset:-2048 glc slc +// GFX10: scratch_load_dword v0, v1, off offset:-2048 glc slc ; encoding: [0x00,0x48,0x33,0xdc,0x01,0x00,0x7d,0x00] +// GFX9: scratch_load_dword v0, v1, off offset:-2048 glc slc ; encoding: [0x00,0x58,0x53,0xdc,0x01,0x00,0x7f,0x00] +// VI-ERR: :32: error: not a valid operand. + +scratch_load_dword v255, off, s1 offset:2047 +// GFX10: scratch_load_dword v255, off, s1 offset:2047 ; encoding: [0xff,0x47,0x30,0xdc,0x00,0x00,0x01,0xff] +// GFX9: scratch_load_dword v255, off, s1 offset:2047 ; encoding: [0xff,0x47,0x50,0xdc,0x00,0x00,0x01,0xff] +// VI-ERR: :34: error: not a valid operand. + +scratch_load_dword v255, off, s0 offset:2048 +// GFX10-ERR: :34: error: expected a 12-bit signed offset +// GFX9: scratch_load_dword v255, off, s0 offset:2048 ; encoding: [0x00,0x48,0x50,0xdc,0x00,0x00,0x00,0xff] +// VI-ERR: :34: error: not a valid operand. + scratch_store_byte v1, v2, off // GFX10: encoding: [0x00,0x40,0x60,0xdc,0x01,0x02,0x7d,0x00] // GFX9: scratch_store_byte v1, v2, off ; encoding: [0x00,0x40,0x60,0xdc,0x01,0x02,0x7f,0x00] diff --git a/llvm/test/MC/Disassembler/AMDGPU/flat_gfx10.txt b/llvm/test/MC/Disassembler/AMDGPU/flat_gfx10.txt new file mode 100644 index 000000000000..6fc105f6e594 --- /dev/null +++ b/llvm/test/MC/Disassembler/AMDGPU/flat_gfx10.txt @@ -0,0 +1,75 @@ +# RUN: llvm-mc -arch=amdgcn -mcpu=gfx1010 -disassemble -show-encoding < %s | FileCheck %s + +#===------------------------------------------------------------------------===# +# scratch_load +#===------------------------------------------------------------------------===# + +# CHECK: scratch_load_dword v1, v255, off offset:-1 glc dlc ; encoding: [0xff,0x5f,0x31,0xdc,0xff,0x00,0x7d,0x01] +0xff 0x5f 0x31 0xdc 0xff 0x00 0x7d 0x01 + +# CHECK: scratch_load_dword v5, v255, off offset:-1 glc slc ; encoding: [0xff,0x4f,0x33,0xdc,0xff,0x00,0x7d,0x05] +0xff 0x4f 0x33 0xdc 0xff 0x00 0x7d 0x05 + +# CHECK: scratch_load_dword v0, v1, off offset:-2048 glc slc dlc ; encoding: [0x00,0x58,0x33,0xdc,0x01,0x00,0x7d,0x00] +0x00 0x58 0x33 0xdc 0x01 0x00 0x7d 0x00 + +# CHECK: scratch_load_dword v255, off, s105 offset:2047 dlc ; encoding: [0xff,0x57,0x30,0xdc,0x00,0x00,0x69,0xff] +0xff 0x57 0x30 0xdc 0x00 0x00 0x69 0xff + +# CHECK: scratch_load_dword v255, v2, off ; encoding: [0x00,0x40,0x30,0xdc,0x02,0x00,0x7d,0xff] +0x00 0x40 0x30 0xdc 0x02 0x00 0x7d 0xff + +# CHECK: scratch_load_dword v5, v0, off dlc ; encoding: [0x00,0x50,0x30,0xdc,0x00,0x00,0x7d,0x05] +0x00 0x50 0x30 0xdc 0x00 0x00 0x7d 0x05 + +# CHECK: scratch_load_dword v5, v3, off slc ; encoding: [0x00,0x40,0x32,0xdc,0x03,0x00,0x7d,0x05] +0x00 0x40 0x32 0xdc 0x03 0x00 0x7d 0x05 + +# CHECK: scratch_load_dword v5, v255, off slc dlc ; encoding: [0x00,0x50,0x32,0xdc,0xff,0x00,0x7d,0x05] +0x00 0x50 0x32 0xdc 0xff 0x00 0x7d 0x05 + +# CHECK: scratch_load_dword v255, off, s2 offset:1 ; encoding: [0x01,0x40,0x30,0xdc,0x00,0x00,0x02,0xff] +0x01 0x40 0x30 0xdc 0x00 0x00 0x02 0xff + +#===------------------------------------------------------------------------===# +# scratch_store +#===------------------------------------------------------------------------===# + +# CHECK: scratch_store_dword off, v2, s3 offset:-1 ; encoding: [0xff,0x4f,0x70,0xdc,0x00,0x02,0x03,0x00] +0xff,0x4f,0x70,0xdc,0x00,0x02,0x03,0x00 + +# CHECK: scratch_store_dword off, v255, s3 offset:-1 ; encoding: [0xff,0x4f,0x70,0xdc,0x00,0xff,0x03,0x00] +0xff,0x4f,0x70,0xdc,0x00,0xff,0x03,0x00 + +# CHECK: scratch_store_dword off, v2, s105 offset:-1 ; encoding: [0xff,0x4f,0x70,0xdc,0x00,0x02,0x69,0x00] +0xff,0x4f,0x70,0xdc,0x00,0x02,0x69,0x00 + +# CHECK: scratch_store_dword off, v2, vcc_lo offset:-1 ; encoding: [0xff,0x4f,0x70,0xdc,0x00,0x02,0x6a,0x00] +0xff,0x4f,0x70,0xdc,0x00,0x02,0x6a,0x00 + +# CHECK: scratch_store_dword off, v2, vcc_hi offset:-1 ; encoding: [0xff,0x4f,0x70,0xdc,0x00,0x02,0x6b,0x00] +0xff,0x4f,0x70,0xdc,0x00,0x02,0x6b,0x00 + +# CHECK: scratch_store_dword off, v2, ttmp15 offset:-1 ; encoding: [0xff,0x4f,0x70,0xdc,0x00,0x02,0x7b,0x00] +0xff,0x4f,0x70,0xdc,0x00,0x02,0x7b,0x00 + +# CHECK: scratch_store_dword v0, v2, off offset:-1 ; encoding: [0xff,0x4f,0x70,0xdc,0x00,0x02,0x7d,0x00] +0xff,0x4f,0x70,0xdc,0x00,0x02,0x7d,0x00 + +# CHECK: scratch_store_dword off, v2, s3 ; encoding: [0x00,0x40,0x70,0xdc,0x00,0x02,0x03,0x00] +0x00,0x40,0x70,0xdc,0x00,0x02,0x03,0x00 + +# CHECK: scratch_store_dword off, v2, s3 offset:2047 ; encoding: [0xff,0x47,0x70,0xdc,0x00,0x02,0x03,0x00] +0xff,0x47,0x70,0xdc,0x00,0x02,0x03,0x00 + +# CHECK: scratch_store_dword off, v2, s3 offset:-2048 ; encoding: [0x00,0x48,0x70,0xdc,0x00,0x02,0x03,0x00] +0x00,0x48,0x70,0xdc,0x00,0x02,0x03,0x00 + +# CHECK: scratch_store_dword off, v2, s3 offset:-1 glc ; encoding: [0xff,0x4f,0x71,0xdc,0x00,0x02,0x03,0x00] +0xff,0x4f,0x71,0xdc,0x00,0x02,0x03,0x00 + +# CHECK: scratch_store_dword off, v2, s3 offset:-1 slc ; encoding: [0xff,0x4f,0x72,0xdc,0x00,0x02,0x03,0x00] +0xff,0x4f,0x72,0xdc,0x00,0x02,0x03,0x00 + +# CHECK: scratch_store_dword off, v2, s3 offset:-1 dlc ; encoding: [0xff,0x5f,0x70,0xdc,0x00,0x02,0x03,0x00] +0xff,0x5f,0x70,0xdc,0x00,0x02,0x03,0x00