From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 56719 invoked by alias); 5 Sep 2017 11:38:28 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 56710 invoked by uid 89); 5 Sep 2017 11:38:28 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-10.2 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_2,GIT_PATCH_3,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-wm0-f48.google.com Received: from mail-wm0-f48.google.com (HELO mail-wm0-f48.google.com) (74.125.82.48) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 05 Sep 2017 11:38:22 +0000 Received: by mail-wm0-f48.google.com with SMTP id u26so17882001wma.0 for ; Tue, 05 Sep 2017 04:38:22 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to; bh=KwkHdlFFbDFRTpf0iUA7sfQdc8FmSmzoONaTawIsJHI=; b=pupKtpkRsrSwwL4JNHHbmxjNcmAb02VN4YyG3XcTW6clwJdswF35q8EhbqgVYQVkkJ LadhQtl6i/WxQJDy1hH7COXtR9+gAV3auRaZTzmhSlN3ESu2Gy2X9UvU7KUh3RsYuf7p rpHQ9J6MWJNmy6e7OshIuYGc14WVgss08udU9hL/TkKMkfd9YkiPm6mQd0dEKOg+JmXN uu3INxgh02GXZLn1YQMO+cRLPGw9li57HH1+at2pQ+2yaV7tMMv7ZigGyW2u9Nr630NE p+Y2omZRmjZZMZs9yBdF4rJwkWVH58w2Ppbr4ZO9+xeJV7z4lRY6EM61lCDDxG0rqrk7 4/lQ== X-Gm-Message-State: AHPjjUh9FHYpAn4W2Vs/7uwExbaGukuCbLxjA5knA4orkCHRiYnvcn/D A/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; Tue, 05 Sep 2017 04:38:20 -0700 (PDT) MIME-Version: 1.0 Received: by 10.80.180.205 with HTTP; Tue, 5 Sep 2017 04:38:20 -0700 (PDT) In-Reply-To: <87tw0iheqh.fsf@linaro.org> References: <87tw0iiu51.fsf@linaro.org> <87tw0iheqh.fsf@linaro.org> From: Richard Biener Date: Tue, 05 Sep 2017 11:38:00 -0000 Message-ID: Subject: Re: [8/9] Make mode_for_size_tree return an opt_mode To: GCC Patches , Richard Sandiford Content-Type: text/plain; charset="UTF-8" X-IsSubscribed: yes X-SW-Source: 2017-09/txt/msg00257.txt.bz2 On Mon, Sep 4, 2017 at 1:42 PM, Richard Sandiford wrote: > ...for consistency with mode_for_size Ok. Thanks, Richard. > 2017-09-04 Richard Sandiford > > gcc/ > * stor-layout.h (mode_for_size_tree): Return an opt_mode. > * stor-layout.c (mode_for_size_tree): Likewise. > (mode_for_array): Update accordingly. > (layout_decl): Likewise. > (compute_record_mode): Likewise. Only set the mode once. > > gcc/ada/ > * gcc-interface/utils.c (make_packable_type): Update call to > mode_for_size_tree. > > Index: gcc/stor-layout.h > =================================================================== > --- gcc/stor-layout.h 2017-08-21 12:14:47.158835574 +0100 > +++ gcc/stor-layout.h 2017-09-04 12:19:01.144339518 +0100 > @@ -99,7 +99,7 @@ extern tree make_unsigned_type (int); > If LIMIT is nonzero, then don't use modes bigger than MAX_FIXED_MODE_SIZE. > The value is BLKmode if no other mode is found. This is like > mode_for_size, but is passed a tree. */ > -extern machine_mode mode_for_size_tree (const_tree, enum mode_class, int); > +extern opt_machine_mode mode_for_size_tree (const_tree, enum mode_class, int); > > extern tree bitwise_type_for_mode (machine_mode); > > Index: gcc/stor-layout.c > =================================================================== > --- gcc/stor-layout.c 2017-09-04 12:18:55.824344959 +0100 > +++ gcc/stor-layout.c 2017-09-04 12:19:01.144339518 +0100 > @@ -321,19 +321,19 @@ mode_for_size (unsigned int size, enum m > > /* Similar, except passed a tree node. */ > > -machine_mode > +opt_machine_mode > mode_for_size_tree (const_tree size, enum mode_class mclass, int limit) > { > unsigned HOST_WIDE_INT uhwi; > unsigned int ui; > > if (!tree_fits_uhwi_p (size)) > - return BLKmode; > + return opt_machine_mode (); > uhwi = tree_to_uhwi (size); > ui = uhwi; > if (uhwi != ui) > - return BLKmode; > - return mode_for_size (ui, mclass, limit).else_blk (); > + return opt_machine_mode (); > + return mode_for_size (ui, mclass, limit); > } > > /* Return the narrowest mode of class MCLASS that contains at least > @@ -563,7 +563,7 @@ mode_for_array (tree elem_type, tree siz > int_size / int_elem_size)) > limit_p = false; > } > - return mode_for_size_tree (size, MODE_INT, limit_p); > + return mode_for_size_tree (size, MODE_INT, limit_p).else_blk (); > } > > /* Subroutine of layout_decl: Force alignment required for the data type. > @@ -683,17 +683,18 @@ layout_decl (tree decl, unsigned int kno > && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST > && GET_MODE_CLASS (TYPE_MODE (type)) == MODE_INT) > { > - machine_mode xmode > - = mode_for_size_tree (DECL_SIZE (decl), MODE_INT, 1); > - unsigned int xalign = GET_MODE_ALIGNMENT (xmode); > - > - if (xmode != BLKmode > - && !(xalign > BITS_PER_UNIT && DECL_PACKED (decl)) > - && (known_align == 0 || known_align >= xalign)) > + machine_mode xmode; > + if (mode_for_size_tree (DECL_SIZE (decl), > + MODE_INT, 1).exists (&xmode)) > { > - SET_DECL_ALIGN (decl, MAX (xalign, DECL_ALIGN (decl))); > - SET_DECL_MODE (decl, xmode); > - DECL_BIT_FIELD (decl) = 0; > + unsigned int xalign = GET_MODE_ALIGNMENT (xmode); > + if (!(xalign > BITS_PER_UNIT && DECL_PACKED (decl)) > + && (known_align == 0 || known_align >= xalign)) > + { > + SET_DECL_ALIGN (decl, MAX (xalign, DECL_ALIGN (decl))); > + SET_DECL_MODE (decl, xmode); > + DECL_BIT_FIELD (decl) = 0; > + } > } > } > > @@ -1756,22 +1757,24 @@ compute_record_mode (tree type) > if (TREE_CODE (type) == RECORD_TYPE && mode != VOIDmode > && tree_fits_uhwi_p (TYPE_SIZE (type)) > && GET_MODE_BITSIZE (mode) == tree_to_uhwi (TYPE_SIZE (type))) > - SET_TYPE_MODE (type, mode); > + ; > else > - SET_TYPE_MODE (type, mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1)); > + mode = mode_for_size_tree (TYPE_SIZE (type), MODE_INT, 1).else_blk (); > > /* If structure's known alignment is less than what the scalar > mode would need, and it matters, then stick with BLKmode. */ > - if (TYPE_MODE (type) != BLKmode > + if (mode != BLKmode > && STRICT_ALIGNMENT > && ! (TYPE_ALIGN (type) >= BIGGEST_ALIGNMENT > - || TYPE_ALIGN (type) >= GET_MODE_ALIGNMENT (TYPE_MODE (type)))) > + || TYPE_ALIGN (type) >= GET_MODE_ALIGNMENT (mode))) > { > /* If this is the only reason this type is BLKmode, then > don't force containing types to be BLKmode. */ > TYPE_NO_FORCE_BLK (type) = 1; > - SET_TYPE_MODE (type, BLKmode); > + mode = BLKmode; > } > + > + SET_TYPE_MODE (type, mode); > } > > /* Compute TYPE_SIZE and TYPE_ALIGN for TYPE, once it has been laid > Index: gcc/ada/gcc-interface/utils.c > =================================================================== > --- gcc/ada/gcc-interface/utils.c 2017-08-30 12:10:52.658405667 +0100 > +++ gcc/ada/gcc-interface/utils.c 2017-09-04 12:19:01.143335745 +0100 > @@ -1076,7 +1076,8 @@ make_packable_type (tree type, bool in_r > in case the record itself contains a BLKmode field. */ > if (in_record && TYPE_MODE (new_type) == BLKmode) > SET_TYPE_MODE (new_type, > - mode_for_size_tree (TYPE_SIZE (new_type), MODE_INT, 1)); > + mode_for_size_tree (TYPE_SIZE (new_type), > + MODE_INT, 1).else_blk ()); > > /* If neither mode nor size nor alignment shrunk, return the old type. */ > if (TYPE_MODE (new_type) == BLKmode && new_size >= size && max_align == 0)