From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 81303 invoked by alias); 23 Oct 2017 17:36:48 -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 81293 invoked by uid 89); 23 Oct 2017 17:36:47 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-11.3 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-wm0-f49.google.com Received: from mail-wm0-f49.google.com (HELO mail-wm0-f49.google.com) (74.125.82.49) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 23 Oct 2017 17:36:46 +0000 Received: by mail-wm0-f49.google.com with SMTP id p75so11017329wmg.3 for ; Mon, 23 Oct 2017 10:36:46 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:mail-followup-to:subject:references:date :in-reply-to:message-id:user-agent:mime-version; bh=1bybj+ivlm5UFWsDItpb9PWYjCa72AqPTmPssXgrv4Y=; b=UIGzOQUYCc5cSdNfrOUjQRfLCt7FmAlOwvsOXwRiYgIdn7v0kj+ce/2MtJRNr8ZIok ls0xTwGgII8Mq53EAgDBvkB6eaCsnwieFBQUdF/IHy+GtarUMZO79Tf3n/mNAtngNcx9 BwpkDuUIVyVgVAc/77V563Vng+54guzblmDFjBFZahEtKU7giNI5AZNoD4ZYw+PZr6ZH WEz5WUrgDefhmay8i0+aqHaCNamU+S0f6SfhbnmMovVpN9yK5T9Kre8Q47F4HVAQEnaI qLJiHyJtOqpiCoRHWuE60ubFCVDTntqPPPfOk60o6xfGGEVZkJ6da/v+z9D3MxI5AlGr T9Ow== X-Gm-Message-State: AMCzsaXmiMWrxCkkXbEd5VOUbzWo9JT7WILC/YM8zPKJZ/ondtttGp7f PVJnJ+79CDNo7k+t3ag0bNt5kL0YkYI= X-Google-Smtp-Source: ABhQp+RtND0O+FOqjIf43G5FiSxE1XhesCvm1dNBG3HAiDcnteIr2wAEZM5ZRemn2CywWLEaIS0bLg== X-Received: by 10.28.213.79 with SMTP id m76mr5967962wmg.44.1508780204412; Mon, 23 Oct 2017 10:36:44 -0700 (PDT) Received: from localhost ([2.26.27.199]) by smtp.gmail.com with ESMTPSA id m37sm8595638wrm.4.2017.10.23.10.36.43 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 23 Oct 2017 10:36:43 -0700 (PDT) From: Richard Sandiford To: gcc-patches@gcc.gnu.org Mail-Followup-To: gcc-patches@gcc.gnu.org, richard.sandiford@linaro.org Subject: [091/nnn] poly_int: emit_single_push_insn_1 References: <871sltvm7r.fsf@linaro.org> Date: Mon, 23 Oct 2017 17:37:00 -0000 In-Reply-To: <871sltvm7r.fsf@linaro.org> (Richard Sandiford's message of "Mon, 23 Oct 2017 17:54:32 +0100") Message-ID: <87vaj5epg5.fsf@linaro.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SW-Source: 2017-10/txt/msg01592.txt.bz2 This patch makes emit_single_push_insn_1 cope with polynomial mode sizes. 2017-10-23 Richard Sandiford Alan Hayward David Sherwood gcc/ * expr.c (emit_single_push_insn_1): Treat mode sizes as polynomial. Use plus_constant instead of gen_rtx_PLUS. Index: gcc/expr.c =================================================================== --- gcc/expr.c 2017-10-23 17:25:35.142976454 +0100 +++ gcc/expr.c 2017-10-23 17:25:37.064907370 +0100 @@ -4141,9 +4141,6 @@ emit_single_push_insn_1 (machine_mode mo access to type. */ else if (targetm.calls.function_arg_padding (mode, type) == PAD_DOWNWARD) { - unsigned padding_size = rounded_size - GET_MODE_SIZE (mode); - HOST_WIDE_INT offset; - emit_move_insn (stack_pointer_rtx, expand_binop (Pmode, STACK_GROWS_DOWNWARD ? sub_optab @@ -4152,31 +4149,27 @@ emit_single_push_insn_1 (machine_mode mo gen_int_mode (rounded_size, Pmode), NULL_RTX, 0, OPTAB_LIB_WIDEN)); - offset = (HOST_WIDE_INT) padding_size; + poly_int64 offset = rounded_size - GET_MODE_SIZE (mode); if (STACK_GROWS_DOWNWARD && STACK_PUSH_CODE == POST_DEC) /* We have already decremented the stack pointer, so get the previous value. */ - offset += (HOST_WIDE_INT) rounded_size; + offset += rounded_size; if (!STACK_GROWS_DOWNWARD && STACK_PUSH_CODE == POST_INC) /* We have already incremented the stack pointer, so get the previous value. */ - offset -= (HOST_WIDE_INT) rounded_size; + offset -= rounded_size; - dest_addr = gen_rtx_PLUS (Pmode, stack_pointer_rtx, - gen_int_mode (offset, Pmode)); + dest_addr = plus_constant (Pmode, stack_pointer_rtx, offset); } else { if (STACK_GROWS_DOWNWARD) /* ??? This seems wrong if STACK_PUSH_CODE == POST_DEC. */ - dest_addr = gen_rtx_PLUS (Pmode, stack_pointer_rtx, - gen_int_mode (-(HOST_WIDE_INT) rounded_size, - Pmode)); + dest_addr = plus_constant (Pmode, stack_pointer_rtx, -rounded_size); else /* ??? This seems wrong if STACK_PUSH_CODE == POST_INC. */ - dest_addr = gen_rtx_PLUS (Pmode, stack_pointer_rtx, - gen_int_mode (rounded_size, Pmode)); + dest_addr = plus_constant (Pmode, stack_pointer_rtx, rounded_size); dest_addr = gen_rtx_PRE_MODIFY (Pmode, stack_pointer_rtx, dest_addr); }