From patchwork Thu Oct 8 07:26:50 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Martin_Li=C5=A1ka?= X-Patchwork-Id: 527623 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 9AF1A140D87 for ; Thu, 8 Oct 2015 18:27:06 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=dQ9D0KBM; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:to :from:subject:message-id:date:mime-version:content-type; q=dns; s=default; b=ajElUPI+6bUaJwjB0BLcJgOlY+Vy4r0t2Ka70+oO20i19v+HsD KqQStfNJE6GExHfB0ES8kKfRbH6nxPcl9nnjf3QYsBnHztTmY8vlCnPcMUZQLZqd 9o3XMXfEXMxRgzkZvZ7/QYut91GK0W+RUZrz6uTVw7zkmroUPEe4SHEd8= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:to :from:subject:message-id:date:mime-version:content-type; s= default; bh=YMftU0ajKjWyMlP2UXO56WRcFJ4=; b=dQ9D0KBM4X6lCA8Nxur/ gfHvTpmqwKrVLDoWzlnHlC635jIm2irO+L4VvLjRd+BERBLQcql81TRN6VNboWC5 xV0Ozme3fKYcexejP1zefy8ZSVNyDJM3ZkXmy2K3VpncEG+Px6SlokLh0B0egpMR tMr+pb9wyGTKQgTX/VuNjpc= Received: (qmail 21334 invoked by alias); 8 Oct 2015 07:26:59 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 21316 invoked by uid 89); 8 Oct 2015 07:26:57 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.0 required=5.0 tests=AWL, BAYES_20, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mx2.suse.de Received: from mx2.suse.de (HELO mx2.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (CAMELLIA256-SHA encrypted) ESMTPS; Thu, 08 Oct 2015 07:26:55 +0000 Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 5DF3CACD0 for ; Thu, 8 Oct 2015 07:26:50 +0000 (UTC) To: gcc-patches@gcc.gnu.org From: =?UTF-8?Q?Martin_Li=c5=a1ka?= Subject: [HSA] Enhancement of debugging stuff Message-ID: <56161ABA.1060603@suse.cz> Date: Thu, 8 Oct 2015 09:26:50 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 X-IsSubscribed: yes Hello. In these couple of patches I enhance debugging support for emitted HSAIL. Starting from now, HSA tree pass contains BRIG offsets that are very useful in case of a validation error occurs. Thanks, Martin From 154bfd46732a8d8525014851de1755cc1e2b51d4 Mon Sep 17 00:00:00 2001 From: marxin Date: Wed, 30 Sep 2015 14:56:45 +0200 Subject: [PATCH 3/3] HSA: dump BRIG section offsets in hsagen dump file. gcc/ChangeLog: 2015-10-08 Martin Liska * hsa-brig.c (emit_comment_insn): Do not release comment's string. (emit_insn): Save BRIG offset. (hsa_brig_emit_function): Dump generated HSAIL after BRIG emission. * hsa-dump.c (dump_hsa_insn): Dump BRIG offset of an instruction. * hsa-gen.c (hsa_insn_basic::hsa_insn_basic): Initialize brig_offset to zero. * hsa.h (hsa_insn_basic::brig_offset): New member variable. --- gcc/hsa-brig.c | 24 +++++++++++++++++++++++- gcc/hsa-dump.c | 32 +++++++++++++++++++------------- gcc/hsa-gen.c | 2 ++ gcc/hsa.h | 3 +++ 4 files changed, 47 insertions(+), 14 deletions(-) diff --git a/gcc/hsa-brig.c b/gcc/hsa-brig.c index 654132d..53c9d32 100644 --- a/gcc/hsa-brig.c +++ b/gcc/hsa-brig.c @@ -137,6 +137,9 @@ static hash_set *emitted_declarations; /* List of sbr instructions. */ static vec *switch_instructions; +/* List of comment instructions. */ +static vec *comment_instructions; + struct function_linkage_pair { function_linkage_pair (tree decl, unsigned int off): @@ -1627,7 +1630,6 @@ emit_comment_insn (hsa_insn_comment *insn) repr.base.kind = htole16 (insn->opcode); repr.name = brig_emit_string (insn->comment, '\0', false); brig_code.add (&repr, sizeof (repr)); - insn->release_string (); } /* Emit queue instruction INSN. */ @@ -1748,6 +1750,9 @@ static void emit_insn (hsa_insn_basic *insn) { gcc_assert (!is_a (insn)); + + insn->brig_offset = brig_code.total_size; + if (hsa_insn_signal *signal = dyn_cast (insn)) { emit_signal_insn (signal); @@ -1805,6 +1810,11 @@ emit_insn (hsa_insn_basic *insn) } if (hsa_insn_comment *comment = dyn_cast (insn)) { + if (comment_instructions == NULL) + comment_instructions = new vec (); + + comment_instructions->safe_push (comment); + emit_comment_insn (comment); return; } @@ -1917,8 +1927,20 @@ hsa_brig_emit_function (void) } } + if (dump_file) + { + fprintf (dump_file, "------- After BRIG emission: -------\n"); + dump_hsa_cfun (dump_file); + } + + if (comment_instructions) + for (unsigned i = 0; i < comment_instructions->length (); i++) + (*comment_instructions)[i]->release_string (); + delete switch_instructions; switch_instructions = NULL; + delete comment_instructions; + comment_instructions = NULL; emit_queued_operands (); } diff --git a/gcc/hsa-dump.c b/gcc/hsa-dump.c index db44347..e074241 100644 --- a/gcc/hsa-dump.c +++ b/gcc/hsa-dump.c @@ -791,7 +791,7 @@ dump_hsa_insn (FILE *f, hsa_insn_basic *insn, int *indent) first = false; dump_hsa_operand (f, phi->get_op (i), true); } - fprintf (f, ">\n"); + fprintf (f, ">"); } else if (is_a (insn)) { @@ -804,7 +804,6 @@ dump_hsa_insn (FILE *f, hsa_insn_basic *insn, int *indent) fprintf (f, "_%s ", hsa_type_name (mem->type)); dump_hsa_operands (f, mem); - fprintf (f, "\n"); } else if (is_a (insn)) @@ -829,7 +828,6 @@ dump_hsa_insn (FILE *f, hsa_insn_basic *insn, int *indent) fprintf (f, "_%s ", hsa_type_name (mem->type)); dump_hsa_operands (f, mem); - fprintf (f, "\n"); } else if (is_a (insn)) { @@ -846,7 +844,6 @@ dump_hsa_insn (FILE *f, hsa_insn_basic *insn, int *indent) dump_hsa_operand (f, mem->get_op (0)); fprintf (f, ", "); dump_hsa_address (f, addr); - fprintf (f, "\n"); } else if (insn->opcode == BRIG_OPCODE_LDA) { @@ -860,7 +857,6 @@ dump_hsa_insn (FILE *f, hsa_insn_basic *insn, int *indent) dump_hsa_operand (f, insn->get_op (0)); fprintf (f, ", "); dump_hsa_address (f, addr); - fprintf (f, "\n"); } else if (is_a (insn)) { @@ -871,7 +867,6 @@ dump_hsa_insn (FILE *f, hsa_insn_basic *insn, int *indent) dump_hsa_reg (f, as_a (seg->get_op (0))); fprintf (f, ", "); dump_hsa_operand (f, seg->get_op (1)); - fprintf (f, "\n"); } else if (is_a (insn)) { @@ -891,7 +886,6 @@ dump_hsa_insn (FILE *f, hsa_insn_basic *insn, int *indent) dump_hsa_operand (f, cmp->get_op (1)); fprintf (f, ", "); dump_hsa_operand (f, cmp->get_op (2)); - fprintf (f, "\n"); } else if (is_a (insn)) { @@ -914,7 +908,7 @@ dump_hsa_insn (FILE *f, hsa_insn_basic *insn, int *indent) target = e->dest; break; } - fprintf (f, "BB %i\n", hsa_bb_for_bb (target)->index); + fprintf (f, "BB %i", hsa_bb_for_bb (target)->index); } else if (is_a (insn)) { @@ -931,7 +925,7 @@ dump_hsa_insn (FILE *f, hsa_insn_basic *insn, int *indent) fprintf (f, ", "); } - fprintf (f, "]\n"); + fprintf (f, "]"); } else if (is_a (insn)) { @@ -948,7 +942,7 @@ dump_hsa_insn (FILE *f, hsa_insn_basic *insn, int *indent) if (!start_p) *indent -= 2; - fprintf (f, "%c\n", c); + fprintf (f, "%c", c); } else if (is_a (insn)) { @@ -968,11 +962,12 @@ dump_hsa_insn (FILE *f, hsa_insn_basic *insn, int *indent) if (i != call->args_symbols.length () - 1) fprintf (f, ", "); } - fprintf (f, ")\n"); + fprintf (f, ")"); } else if (is_a (insn)) { - fprintf (f, "%s\n", as_a (insn)->comment); + hsa_insn_comment *c = as_a (insn); + fprintf (f, "%s", c->comment); } else { @@ -1001,8 +996,19 @@ dump_hsa_insn (FILE *f, hsa_insn_basic *insn, int *indent) else fprintf (f, "UNKNOWN_OP_KIND"); } - fprintf (f, "\n"); } + + if (insn->brig_offset) + { + fprintf (f, " /* BRIG offset: %u", insn->brig_offset); + + for (unsigned i = 0; i < insn->operand_count (); i++) + fprintf (f, ", op%u: %u", i, insn->get_op (i)->brig_op_offset); + + fprintf (f, " */"); + } + + fprintf (f, "\n"); } /* Dump textual representation of HSA IL in HBB to file F. */ diff --git a/gcc/hsa-gen.c b/gcc/hsa-gen.c index 02587b9..291d650 100644 --- a/gcc/hsa-gen.c +++ b/gcc/hsa-gen.c @@ -1047,6 +1047,7 @@ hsa_insn_basic::hsa_insn_basic (unsigned nops, int opc) bb = NULL; number = 0; type = BRIG_TYPE_NONE; + brig_offset = 0; if (nops > 0) operands.safe_grow_cleared (nops); @@ -1117,6 +1118,7 @@ hsa_insn_basic::hsa_insn_basic (unsigned nops, int opc, BrigType16_t t, prev = next = NULL; bb = NULL; number = 0; + brig_offset = 0; if (nops > 0) operands.safe_grow_cleared (nops); diff --git a/gcc/hsa.h b/gcc/hsa.h index 243065e..ce6414a 100644 --- a/gcc/hsa.h +++ b/gcc/hsa.h @@ -377,6 +377,9 @@ public: /* Type of the destination of the operations. */ BrigType16_t type; + /* BRIG offset of the instruction in code section. */ + unsigned int brig_offset; + private: /* Make the default constructor inaccessible. */ hsa_insn_basic () {} -- 2.5.1