[{"id":1763255,"web_url":"http://patchwork.ozlabs.org/comment/1763255/","msgid":"<CAFiYyc2UtS4WcPBGqFxik-RQ5+TjWttsSkkxyoo=KVnASqO-Ww@mail.gmail.com>","list_archive_url":null,"date":"2017-09-05T11:38:20","subject":"Re: [8/9] Make mode_for_size_tree return an opt_mode","submitter":{"id":1765,"url":"http://patchwork.ozlabs.org/api/people/1765/","name":"Richard Biener","email":"richard.guenther@gmail.com"},"content":"On Mon, Sep 4, 2017 at 1:42 PM, Richard Sandiford\n<richard.sandiford@linaro.org> wrote:\n> ...for consistency with mode_for_size\n\nOk.\n\nThanks,\nRichard.\n\n> 2017-09-04  Richard Sandiford  <richard.sandiford@linaro.org>\n>\n> gcc/\n>         * stor-layout.h (mode_for_size_tree): Return an opt_mode.\n>         * stor-layout.c (mode_for_size_tree): Likewise.\n>         (mode_for_array): Update accordingly.\n>         (layout_decl): Likewise.\n>         (compute_record_mode): Likewise.  Only set the mode once.\n>\n> gcc/ada/\n>         * gcc-interface/utils.c (make_packable_type): Update call to\n>         mode_for_size_tree.\n>\n> Index: gcc/stor-layout.h\n> ===================================================================\n> --- gcc/stor-layout.h   2017-08-21 12:14:47.158835574 +0100\n> +++ gcc/stor-layout.h   2017-09-04 12:19:01.144339518 +0100\n> @@ -99,7 +99,7 @@ extern tree make_unsigned_type (int);\n>     If LIMIT is nonzero, then don't use modes bigger than MAX_FIXED_MODE_SIZE.\n>     The value is BLKmode if no other mode is found.  This is like\n>     mode_for_size, but is passed a tree.  */\n> -extern machine_mode mode_for_size_tree (const_tree, enum mode_class, int);\n> +extern opt_machine_mode mode_for_size_tree (const_tree, enum mode_class, int);\n>\n>  extern tree bitwise_type_for_mode (machine_mode);\n>\n> Index: gcc/stor-layout.c\n> ===================================================================\n> --- gcc/stor-layout.c   2017-09-04 12:18:55.824344959 +0100\n> +++ gcc/stor-layout.c   2017-09-04 12:19:01.144339518 +0100\n> @@ -321,19 +321,19 @@ mode_for_size (unsigned int size, enum m\n>\n>  /* Similar, except passed a tree node.  */\n>\n> -machine_mode\n> +opt_machine_mode\n>  mode_for_size_tree (const_tree size, enum mode_class mclass, int limit)\n>  {\n>    unsigned HOST_WIDE_INT uhwi;\n>    unsigned int ui;\n>\n>    if (!tree_fits_uhwi_p (size))\n> -    return BLKmode;\n> +    return opt_machine_mode ();\n>    uhwi = tree_to_uhwi (size);\n>    ui = uhwi;\n>    if (uhwi != ui)\n> -    return BLKmode;\n> -  return mode_for_size (ui, mclass, limit).else_blk ();\n> +    return opt_machine_mode ();\n> +  return mode_for_size (ui, mclass, limit);\n>  }\n>\n>  /* Return the narrowest mode of class MCLASS that contains at least\n> @@ -563,7 +563,7 @@ mode_for_array (tree elem_type, tree siz\n>                                              int_size / int_elem_size))\n>         limit_p = false;\n>      }\n> -  return mode_for_size_tree (size, MODE_INT, limit_p);\n> +  return mode_for_size_tree (size, MODE_INT, limit_p).else_blk ();\n>  }\n>\n>  /* Subroutine of layout_decl: Force alignment required for the data type.\n> @@ -683,17 +683,18 @@ layout_decl (tree decl, unsigned int kno\n>               && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST\n>               && GET_MODE_CLASS (TYPE_MODE (type)) == MODE_INT)\n>             {\n> -             machine_mode xmode\n> -               = mode_for_size_tree (DECL_SIZE (decl), MODE_INT, 1);\n> -             unsigned int xalign = GET_MODE_ALIGNMENT (xmode);\n> -\n> -             if (xmode != BLKmode\n> -                 && !(xalign > BITS_PER_UNIT && DECL_PACKED (decl))\n> -                 && (known_align == 0 || known_align >= xalign))\n> +             machine_mode xmode;\n> +             if (mode_for_size_tree (DECL_SIZE (decl),\n> +                                     MODE_INT, 1).exists (&xmode))\n>                 {\n> -                 SET_DECL_ALIGN (decl, MAX (xalign, DECL_ALIGN (decl)));\n> -                 SET_DECL_MODE (decl, xmode);\n> -                 DECL_BIT_FIELD (decl) = 0;\n> +                 unsigned int xalign = GET_MODE_ALIGNMENT (xmode);\n> +                 if (!(xalign > BITS_PER_UNIT && DECL_PACKED (decl))\n> +                     && (known_align == 0 || known_align >= xalign))\n> +                   {\n> +                     SET_DECL_ALIGN (decl, MAX (xalign, DECL_ALIGN (decl)));\n> +                     SET_DECL_MODE (decl, xmode);\n> +                     DECL_BIT_FIELD (decl) = 0;\n> +                   }\n>                 }\n>             }\n>\n> @@ -1756,22 +1757,24 @@ compute_record_mode (tree type)\n>    if (TREE_CODE (type) == RECORD_TYPE && mode != VOIDmode\n>        && tree_fits_uhwi_p (TYPE_SIZE (type))\n>        && GET_MODE_BITSIZE (mode) == tree_to_uhwi (TYPE_SIZE (type)))\n> -    SET_TYPE_MODE (type, mode);\n> +    ;\n>    else\n> -    SET_TYPE_MODE (type, mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1));\n> +    mode = mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1).else_blk ();\n>\n>    /* If structure's known alignment is less than what the scalar\n>       mode would need, and it matters, then stick with BLKmode.  */\n> -  if (TYPE_MODE (type) != BLKmode\n> +  if (mode != BLKmode\n>        && STRICT_ALIGNMENT\n>        && ! (TYPE_ALIGN (type) >= BIGGEST_ALIGNMENT\n> -           || TYPE_ALIGN (type) >= GET_MODE_ALIGNMENT (TYPE_MODE (type))))\n> +           || TYPE_ALIGN (type) >= GET_MODE_ALIGNMENT (mode)))\n>      {\n>        /* If this is the only reason this type is BLKmode, then\n>          don't force containing types to be BLKmode.  */\n>        TYPE_NO_FORCE_BLK (type) = 1;\n> -      SET_TYPE_MODE (type, BLKmode);\n> +      mode = BLKmode;\n>      }\n> +\n> +  SET_TYPE_MODE (type, mode);\n>  }\n>\n>  /* Compute TYPE_SIZE and TYPE_ALIGN for TYPE, once it has been laid\n> Index: gcc/ada/gcc-interface/utils.c\n> ===================================================================\n> --- gcc/ada/gcc-interface/utils.c       2017-08-30 12:10:52.658405667 +0100\n> +++ gcc/ada/gcc-interface/utils.c       2017-09-04 12:19:01.143335745 +0100\n> @@ -1076,7 +1076,8 @@ make_packable_type (tree type, bool in_r\n>       in case the record itself contains a BLKmode field.  */\n>    if (in_record && TYPE_MODE (new_type) == BLKmode)\n>      SET_TYPE_MODE (new_type,\n> -                  mode_for_size_tree (TYPE_SIZE (new_type), MODE_INT, 1));\n> +                  mode_for_size_tree (TYPE_SIZE (new_type),\n> +                                      MODE_INT, 1).else_blk ());\n>\n>    /* If neither mode nor size nor alignment shrunk, return the old type.  */\n>    if (TYPE_MODE (new_type) == BLKmode && new_size >= size && max_align == 0)","headers":{"Return-Path":"<gcc-patches-return-461495-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-461495-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=\"djkQ5s7G\"; 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 3xml8r0HG3z9sNq\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue,  5 Sep 2017 21:38:35 +1000 (AEST)","(qmail 56719 invoked by alias); 5 Sep 2017 11:38:28 -0000","(qmail 56710 invoked by uid 89); 5 Sep 2017 11:38:28 -0000","from mail-wm0-f48.google.com (HELO mail-wm0-f48.google.com)\n\t(74.125.82.48) by sourceware.org\n\t(qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP;\n\tTue, 05 Sep 2017 11:38:22 +0000","by mail-wm0-f48.google.com with SMTP id u26so17882001wma.0 for\n\t<gcc-patches@gcc.gnu.org>; Tue, 05 Sep 2017 04:38:22 -0700 (PDT)","by 10.80.180.205 with HTTP; Tue, 5 Sep 2017 04:38:20 -0700 (PDT)"],"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\n\t:mime-version:in-reply-to:references:from:date:message-id\n\t:subject:to:content-type; q=dns; s=default; b=vxvUf9VNtL9hQKtp67\n\tfcy5BAeAg6ke4LkO5yFW8Ix0ltfoOyquLFtlu8I4bLfYUm6OisPVDGq04K2RwAX4\n\tnhnEFb3R5BECNuSzWLgs3luPXXcNEkJ/eR81BEKuJEgM8DbHlngtqyBShQ2kiTjk\n\tesj8o0k6iRIYq5sq212ktNzBs=","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\n\t:mime-version:in-reply-to:references:from:date:message-id\n\t:subject:to:content-type; s=default; bh=AnhXAq/LrDlqpM7+Zm+o1v1A\n\tepc=; b=djkQ5s7GUY8mEN7dS3/rcofzBfovhrQRKJe/3kxVIFk7bkzFVJhyHE0M\n\tq38wJoPMR6XmYLl0cH2hlFfuzERg0qNX5Yfb8iyf9+bwfa10jMdkY7/MI6lCHIXD\n\tg5AlpNXjT1TJo0SboLPIoUU7DqKNIQ4DPSC4PmCE12eeKRspRjs=","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=-10.2 required=5.0 tests=AWL, BAYES_00,\n\tFREEMAIL_FROM, GIT_PATCH_2, GIT_PATCH_3, KAM_ASCII_DIVIDERS,\n\tRCVD_IN_DNSWL_NONE,\n\tSPF_PASS autolearn=ham version=3.3.2 spammy=","X-HELO":"mail-wm0-f48.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:mime-version:in-reply-to:references:from:date\n\t:message-id:subject:to;\n\tbh=KwkHdlFFbDFRTpf0iUA7sfQdc8FmSmzoONaTawIsJHI=;\n\tb=pupKtpkRsrSwwL4JNHHbmxjNcmAb02VN4YyG3XcTW6clwJdswF35q8EhbqgVYQVkkJ\n\tLadhQtl6i/WxQJDy1hH7COXtR9+gAV3auRaZTzmhSlN3ESu2Gy2X9UvU7KUh3RsYuf7p\n\trpHQ9J6MWJNmy6e7OshIuYGc14WVgss08udU9hL/TkKMkfd9YkiPm6mQd0dEKOg+JmXN\n\tuu3INxgh02GXZLn1YQMO+cRLPGw9li57HH1+at2pQ+2yaV7tMMv7ZigGyW2u9Nr630NE\n\tp+Y2omZRmjZZMZs9yBdF4rJwkWVH58w2Ppbr4ZO9+xeJV7z4lRY6EM61lCDDxG0rqrk7\n\t4/lQ==","X-Gm-Message-State":"AHPjjUh9FHYpAn4W2Vs/7uwExbaGukuCbLxjA5knA4orkCHRiYnvcn/D\tA/7v8HzuNEAwzROZ+UVTROb+OF6MdMOL","X-Google-Smtp-Source":"ADKCNb7qAILhBqBfU1jgs09wm//7O1fYMUjOyo+qxGdSrs47I4rGGUp1X8ZCAMNjjYJt/YPzFOXP0KezEk3+CoWv7qo=","X-Received":"by 10.80.240.26 with SMTP id r26mr3078802edl.142.1504611500483;\n\tTue, 05 Sep 2017 04:38:20 -0700 (PDT)","MIME-Version":"1.0","In-Reply-To":"<87tw0iheqh.fsf@linaro.org>","References":"<87tw0iiu51.fsf@linaro.org> <87tw0iheqh.fsf@linaro.org>","From":"Richard Biener <richard.guenther@gmail.com>","Date":"Tue, 5 Sep 2017 13:38:20 +0200","Message-ID":"<CAFiYyc2UtS4WcPBGqFxik-RQ5+TjWttsSkkxyoo=KVnASqO-Ww@mail.gmail.com>","Subject":"Re: [8/9] Make mode_for_size_tree return an opt_mode","To":"GCC Patches <gcc-patches@gcc.gnu.org>,\n\tRichard Sandiford <richard.sandiford@linaro.org>","Content-Type":"text/plain; charset=\"UTF-8\"","X-IsSubscribed":"yes"}}]