[{"id":1844979,"web_url":"http://patchwork.ozlabs.org/comment/1844979/","msgid":"<20180123212226.GQ2676@embecosm.com>","list_archive_url":null,"date":"2018-01-23T21:22:26","subject":"Re: [PATCH 4/6] [ARC] Rework delegitimate_address hook","submitter":{"id":65155,"url":"http://patchwork.ozlabs.org/api/people/65155/","name":"Andrew Burgess","email":"andrew.burgess@embecosm.com"},"content":"* Claudiu Zissulescu <Claudiu.Zissulescu@synopsys.com> [2017-11-02 13:30:33 +0100]:\n\n> From: claziss <claziss@synopsys.com>\n> \n> Delegitimize address is used to undo the obfuscating effect of PIC\n> addresses, returning the address in a way which is understood by the\n> compiler.\n> \n> gcc/\n> 2017-04-25  Claudiu Zissulescu  <claziss@synopsys.com>\n> \n> \t* config/arc/arc.c (arc_delegitimize_address_0): Refactored to\n> \trecognize new pic like addresses.\n> \t(arc_delegitimize_address): Clean up.\n> \n> testsuite/\n> 2017-08-31  Claudiu Zissulescu  <claziss@synopsys.com>\n> \n> \t* testsuite/gcc.target/arc/tdelegitimize_addr.c: New test.\n\nAssuming this has passed all of the tests, then this change is fine\nwith me.\n\nThe commit message you propose above describes what delegitimize does\nin general, but it doesn't really explain why _this_ change is\nneeded.  You remove a lot of code, it would be nice if the commit\nmessage explained why we're able to drop all of this complexity.\n\nThanks,\nAndrew\n\n\n\n> ---\n>  gcc/config/arc/arc.c                              | 91 ++++++++++-------------\n>  gcc/testsuite/gcc.target/arc/tdelegitimize_addr.c | 23 ++++++\n>  2 files changed, 62 insertions(+), 52 deletions(-)\n>  create mode 100755 gcc/testsuite/gcc.target/arc/tdelegitimize_addr.c\n> \n> diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c\n> index e7194a2..07dd072 100644\n> --- a/gcc/config/arc/arc.c\n> +++ b/gcc/config/arc/arc.c\n> @@ -9506,68 +9506,55 @@ arc_legitimize_address (rtx orig_x, rtx oldx, machine_mode mode)\n>  }\n>  \n>  static rtx\n> -arc_delegitimize_address_0 (rtx x)\n> +arc_delegitimize_address_0 (rtx op)\n>  {\n> -  rtx u, gp, p;\n> -\n> -  if (GET_CODE (x) == CONST && GET_CODE (u = XEXP (x, 0)) == UNSPEC)\n> +  switch (GET_CODE (op))\n>      {\n> -      if (XINT (u, 1) == ARC_UNSPEC_GOT\n> -\t  || XINT (u, 1) == ARC_UNSPEC_GOTOFFPC)\n> -\treturn XVECEXP (u, 0, 0);\n> +    case CONST:\n> +      return arc_delegitimize_address_0 (XEXP (op, 0));\n> +\n> +    case UNSPEC:\n> +      switch (XINT (op, 1))\n> +\t{\n> +\tcase ARC_UNSPEC_GOT:\n> +\tcase ARC_UNSPEC_GOTOFFPC:\n> +\t  return XVECEXP (op, 0, 0);\n> +\tdefault:\n> +\t  break;\n> +\t}\n> +      break;\n> +\n> +    case PLUS:\n> +      {\n> +\trtx t1 = arc_delegitimize_address_0 (XEXP (op, 0));\n> +\trtx t2 = XEXP (op, 1);\n> +\n> +\tif (t1 && t2)\n> +\t  return gen_rtx_PLUS (GET_MODE (op), t1, t2);\n> +\tbreak;\n> +      }\n> +\n> +    default:\n> +      break;\n>      }\n> -  else if (GET_CODE (x) == CONST && GET_CODE (p = XEXP (x, 0)) == PLUS\n> -\t   && GET_CODE (u = XEXP (p, 0)) == UNSPEC\n> -\t   && (XINT (u, 1) == ARC_UNSPEC_GOT\n> -\t       || XINT (u, 1) == ARC_UNSPEC_GOTOFFPC))\n> -    return gen_rtx_CONST\n> -\t    (GET_MODE (x),\n> -\t     gen_rtx_PLUS (GET_MODE (p), XVECEXP (u, 0, 0), XEXP (p, 1)));\n> -  else if (GET_CODE (x) == PLUS\n> -\t   && ((REG_P (gp = XEXP (x, 0))\n> -\t\t&& REGNO (gp) == PIC_OFFSET_TABLE_REGNUM)\n> -\t       || (GET_CODE (gp) == CONST\n> -\t\t   && GET_CODE (u = XEXP (gp, 0)) == UNSPEC\n> -\t\t   && XINT (u, 1) == ARC_UNSPEC_GOT\n> -\t\t   && GET_CODE (XVECEXP (u, 0, 0)) == SYMBOL_REF\n> -\t\t   && !strcmp (XSTR (XVECEXP (u, 0, 0), 0), \"_DYNAMIC\")))\n> -\t   && GET_CODE (XEXP (x, 1)) == CONST\n> -\t   && GET_CODE (u = XEXP (XEXP (x, 1), 0)) == UNSPEC\n> -\t   && XINT (u, 1) == ARC_UNSPEC_GOTOFF)\n> -    return XVECEXP (u, 0, 0);\n> -  else if (GET_CODE (x) == PLUS && GET_CODE (XEXP (x, 0)) == PLUS\n> -\t   && ((REG_P (gp = XEXP (XEXP (x, 0), 1))\n> -\t\t&& REGNO (gp) == PIC_OFFSET_TABLE_REGNUM)\n> -\t       || (GET_CODE (gp) == CONST\n> -\t\t   && GET_CODE (u = XEXP (gp, 0)) == UNSPEC\n> -\t\t   && XINT (u, 1) == ARC_UNSPEC_GOT\n> -\t\t   && GET_CODE (XVECEXP (u, 0, 0)) == SYMBOL_REF\n> -\t\t   && !strcmp (XSTR (XVECEXP (u, 0, 0), 0), \"_DYNAMIC\")))\n> -\t   && GET_CODE (XEXP (x, 1)) == CONST\n> -\t   && GET_CODE (u = XEXP (XEXP (x, 1), 0)) == UNSPEC\n> -\t   && XINT (u, 1) == ARC_UNSPEC_GOTOFF)\n> -    return gen_rtx_PLUS (GET_MODE (x), XEXP (XEXP (x, 0), 0),\n> -\t\t\t XVECEXP (u, 0, 0));\n> -  else if (GET_CODE (x) == PLUS\n> -\t   && (u = arc_delegitimize_address_0 (XEXP (x, 1))))\n> -    return gen_rtx_PLUS (GET_MODE (x), XEXP (x, 0), u);\n>    return NULL_RTX;\n>  }\n>  \n>  static rtx\n> -arc_delegitimize_address (rtx x)\n> +arc_delegitimize_address (rtx orig_x)\n>  {\n> -  rtx orig_x = x = delegitimize_mem_from_attrs (x);\n> -  if (GET_CODE (x) == MEM)\n> +  rtx x = orig_x;\n> +\n> +  if (MEM_P (x))\n>      x = XEXP (x, 0);\n> +\n>    x = arc_delegitimize_address_0 (x);\n> -  if (x)\n> -    {\n> -      if (MEM_P (orig_x))\n> -\tx = replace_equiv_address_nv (orig_x, x);\n> -      return x;\n> -    }\n> -  return orig_x;\n> +  if (!x)\n> +    return orig_x;\n> +\n> +  if (MEM_P (orig_x))\n> +    x = replace_equiv_address_nv (orig_x, x);\n> +  return x;\n>  }\n>  \n>  /* Return a REG rtx for acc1.  N.B. the gcc-internal representation may\n> diff --git a/gcc/testsuite/gcc.target/arc/tdelegitimize_addr.c b/gcc/testsuite/gcc.target/arc/tdelegitimize_addr.c\n> new file mode 100755\n> index 0000000..0d010ff\n> --- /dev/null\n> +++ b/gcc/testsuite/gcc.target/arc/tdelegitimize_addr.c\n> @@ -0,0 +1,23 @@\n> +/* { dg-do compile } */\n> +/* { dg-skip-if \"\" { ! { clmcpu } } } */\n> +/* { dg-options \"-mcpu=archs -g -O1 -fpic -mlra\" } */\n> +\n> +/* Check if delegitimize address returns correctly the un-obfuscated\n> +   address.  */\n> +\n> +typedef struct {\n> +  long long tv_usec;\n> +} t_a;\n> +\n> +static t_a a;\n> +\n> +int b;\n> +extern void fn2 (t_a);\n> +\n> +void fn1 (void)\n> +{\n> + again:\n> +  fn2(a);\n> +  if (b)\n> +    goto again;\n> +}\n> -- \n> 1.9.1\n>","headers":{"Return-Path":"<gcc-patches-return-471918-incoming=patchwork.ozlabs.org@gcc.gnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":["patchwork-incoming@bilbo.ozlabs.org","mailing list gcc-patches@gcc.gnu.org"],"Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org\n\t(client-ip=209.132.180.131; helo=sourceware.org;\n\tenvelope-from=gcc-patches-return-471918-incoming=patchwork.ozlabs.org@gcc.gnu.org;\n\treceiver=<UNKNOWN>)","ozlabs.org; dkim=pass (1024-bit key;\n\tunprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org\n\theader.b=\"pf+TQeD6\"; dkim-atps=neutral","sourceware.org; auth=none"],"Received":["from sourceware.org (server1.sourceware.org [209.132.180.131])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3zR1V835J8z9s7F\n\tfor <incoming@patchwork.ozlabs.org>;\n\tWed, 24 Jan 2018 08:22:40 +1100 (AEDT)","(qmail 61618 invoked by alias); 23 Jan 2018 21:22:33 -0000","(qmail 61609 invoked by uid 89); 23 Jan 2018 21:22:32 -0000","from mail-wm0-f68.google.com (HELO mail-wm0-f68.google.com)\n\t(74.125.82.68) by sourceware.org\n\t(qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP;\n\tTue, 23 Jan 2018 21:22:30 +0000","by mail-wm0-f68.google.com with SMTP id v123so4621500wmd.5 for\n\t<gcc-patches@gcc.gnu.org>; Tue, 23 Jan 2018 13:22:30 -0800 (PST)","from localhost (host86-164-103-151.range86-164.btcentralplus.com.\n\t[86.164.103.151]) by smtp.gmail.com with ESMTPSA id\n\tv21sm1381956wrd.94.2018.01.23.13.22.27 (version=TLS1_2\n\tcipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256);\n\tTue, 23 Jan 2018 13:22:27 -0800 (PST)"],"DomainKey-Signature":"a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id\n\t:list-unsubscribe:list-archive:list-post:list-help:sender:date\n\t:from:to:cc:subject:message-id:references:mime-version\n\t:content-type:in-reply-to; q=dns; s=default; b=kKX9WPP0HbXryL2dA\n\tbvQMUinncTCJRsU5ltos0cV59ovNf1sN1EOMtp1rxfaPVmGY3cIJ4C/vGVlcp9ib\n\tkfC2D2SIGm+A3hacCRJdBgnuXsa4lYldtRQcAWc7Q3qdyOt3RUkKxjnJheV5AZ5g\n\tvx78+mFKp0kezDoYemQmkaDLTo=","DKIM-Signature":"v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id\n\t:list-unsubscribe:list-archive:list-post:list-help:sender:date\n\t:from:to:cc:subject:message-id:references:mime-version\n\t:content-type:in-reply-to; s=default; bh=AlWPTG4gK6t9l5YzOdW4C0C\n\tSS/w=; b=pf+TQeD6C+Fzxi9+mQ/ntJAD9Ng9GE7s8pKiFb/RzBihB2bdNpO4RWw\n\trfHiZxvwGZIpi3ckIuwymJn/gM2pNJhiUm7Jth8Cfcpuv4qm9zIz4xnfhdbXff8A\n\t04MqAaaJrq6cJ32k+avNxM5eqmDPckp8og+ApoBFeC2+pgQYfRxc=","Mailing-List":"contact gcc-patches-help@gcc.gnu.org; run by ezmlm","Precedence":"bulk","List-Id":"<gcc-patches.gcc.gnu.org>","List-Unsubscribe":"<mailto:gcc-patches-unsubscribe-incoming=patchwork.ozlabs.org@gcc.gnu.org>","List-Archive":"<http://gcc.gnu.org/ml/gcc-patches/>","List-Post":"<mailto:gcc-patches@gcc.gnu.org>","List-Help":"<mailto:gcc-patches-help@gcc.gnu.org>","Sender":"gcc-patches-owner@gcc.gnu.org","X-Virus-Found":"No","X-Spam-SWARE-Status":"No, score=-25.6 required=5.0 tests=AWL, BAYES_00,\n\tGIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3,\n\tRCVD_IN_DNSWL_NONE,\n\tSPF_PASS autolearn=ham version=3.3.2 spammy=HTo:D*synopsys.com,\n\tH*Ad:D*synopsys.com, 2017-11-02, 2017-04-25","X-HELO":"mail-wm0-f68.google.com","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net;\n\ts=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:in-reply-to:user-agent;\n\tbh=WK9balM0jAF3WQ05RNLZehzO56bS763Nl+Wq4oQJpFY=;\n\tb=E8faVuuxiKsAun88PngpgJdU9o85Ue0Ji59X2uh+rnmmKaCOq5FKpyS2PrEI3HmQtM\n\tskkOxEuFY0KJDq6Dyq9FWvpwXmGDtvr6tjviciPg/wgGSTOLAk+MMkXRwqQDNBL/w750\n\tydMeczzICNjqYKiJu6Q14fU0ZCse8Z/IRo8uiHRFi4VOLvkVMZ4hYaxmSPV2JaNpNy+2\n\tlb4x9USumSRyaD6Deb/eChpBC4WxOdF3+979tYAQ4iOOekV+E4Kc8DaUEj5dtfqJxVB5\n\txdMRXlWgabacs03L5Od594kkzb9IgMtZ5ySQa3jBeNCfUGQf2cRWq8xSbzDHgHbxciFw\n\txxcQ==","X-Gm-Message-State":"AKwxytd94vwTU7y2heDGm0Nm5W0DWmcxq+6hWP+HsNqnUBP0qvS47+4u\tAGiSJ/91KEztoBdVDmRmMeBHnA==","X-Google-Smtp-Source":"AH8x224xGI0tYWolNC1U92BbWgEh76uTVYFXakDmSPDxB8cq9lHdQlqzVO0GD/wXETNPlpYKrKHw5A==","X-Received":"by 10.28.225.133 with SMTP id y127mr2788956wmg.55.1516742548341;\n\tTue, 23 Jan 2018 13:22:28 -0800 (PST)","Date":"Tue, 23 Jan 2018 21:22:26 +0000","From":"Andrew Burgess <andrew.burgess@embecosm.com>","To":"Claudiu Zissulescu <Claudiu.Zissulescu@synopsys.com>","Cc":"gcc-patches@gcc.gnu.org, Francois.Bedard@synopsys.com","Subject":"Re: [PATCH 4/6] [ARC] Rework delegitimate_address hook","Message-ID":"<20180123212226.GQ2676@embecosm.com>","References":"<1509625835-22344-1-git-send-email-claziss@synopsys.com>\n\t<1509625835-22344-5-git-send-email-claziss@synopsys.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<1509625835-22344-5-git-send-email-claziss@synopsys.com>","X-Editor":"GNU Emacs [ http://www.gnu.org/software/emacs ]","User-Agent":"Mutt/1.9.1 (2017-09-22)","X-IsSubscribed":"yes"}}]