From patchwork Thu Jul 13 08:41:26 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Sandiford X-Patchwork-Id: 107595 Delivered-To: patch@linaro.org Received: by 10.140.101.44 with SMTP id t41csp1925791qge; Thu, 13 Jul 2017 01:41:48 -0700 (PDT) X-Received: by 10.84.136.70 with SMTP id 64mr8738564plk.50.1499935308246; Thu, 13 Jul 2017 01:41:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1499935308; cv=none; d=google.com; s=arc-20160816; b=gFvURbq5DUsIpUS0a33rw8QVrk0YGDvixLPWv0WGQpibg9vKTYetdKvQKSYE2BPTyf pP8jekJeDF+OHiok35R5+ddLN915CU/SwU8YxsiDJ97t2aJkC97w//JbouGF8MlLY6b1 FVKGt7vG9z9HQGIkKArjMGoUAJwDoILECFAUc8fKhale2jwXqq/bC49R7JZOce3n1ddz bg7p/affoktusQw4IpDf1vLPNUcsLC67HTTgsV4MyG+PNkBskUtheua2QdFR6BVzNlip uWZZDWT0cypvQAYliGP+QDrKwkCORapc6Uv4G89K15VnOaQBJNQVO46S8UvKgcKDz9Fv AQFw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:user-agent:message-id:in-reply-to:date:references :subject:mail-followup-to:to:from:delivered-to:sender:list-help :list-post:list-archive:list-unsubscribe:list-id:precedence :mailing-list:dkim-signature:domainkey-signature :arc-authentication-results; bh=fTFcJ/p5NbtDdkFKtaSZpglRdXA4SL44mZErTok/7fg=; b=hiOlvz2Ytofuj3yQh0ncMY0Qrhf30fjLYepSTmN8ZMhojPSoiKxbtPMmtq+qJp71LP lw7N1rimyx1kohg5fuWI2o5apItzNQmGtU/NesodE+oUCXdg0iTZCGKuTjpvkwXisr3C sj7cKZn2rIS4Pvk51x+PIey+eHSDEQ7fzWyZENM/cj/8TXZni3QB3bT+KJR01smSdL7W TShsSoZF5x1zf+CQnfmykayUlR5Gj6bWPHDVTgi7iYRkM4i59Fu8ltxBOVRZ5KOIqSNE KVtB0N8KRx9nmW0SwwCSV9uZZ4DLKpNJ0c+FunPzsrVjVQ1QyNUg6Nf1OCu+N5hFUjwo jwkg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.b=bX7U6OV6; spf=pass (google.com: domain of gcc-patches-return-457999-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-457999-patch=linaro.org@gcc.gnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id v2si3812139pgq.403.2017.07.13.01.41.47 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 13 Jul 2017 01:41:48 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-return-457999-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) client-ip=209.132.180.131; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.b=bX7U6OV6; spf=pass (google.com: domain of gcc-patches-return-457999-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-457999-patch=linaro.org@gcc.gnu.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:subject:references:date:in-reply-to:message-id:mime-version :content-type; q=dns; s=default; b=DPbuDt9vj/oLI3eAl6DO6H+A7Wr+w kR4GauzunkGmfpcK2EiLBNRFo4nFE7BZkiV5P/FlmXqgv3H21OkbKkjWyteU1B7q xQYlleNGJXaM9Z07wkAg3berpHzw818Eqk4PwEgJBYbSxFZ4rgfZCSXjRrbVT4Yc nSqORsPtIECUZg= 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:from :to:subject:references:date:in-reply-to:message-id:mime-version :content-type; s=default; bh=XxNzHmnG7QCEN30dw+39GRz9U2o=; b=bX7 U6OV6pLKygzBHWws9r4cGlSoEgUtVVGInli4wb3vl1Bccrg7nf++cpQ3Q/75z7RB HcVYb8nJo17fek/8tvvuUKp5+Ek6yks/s48L4fFgQbGaszaruDeYcsUGSKNDU+Ms fWT7HHctcOTyeXHOFXotC1Poy6Y5orgjy+/IqmDo= Received: (qmail 52196 invoked by alias); 13 Jul 2017 08:41:33 -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 51113 invoked by uid 89); 13 Jul 2017 08:41:32 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-11.0 required=5.0 tests=AWL, BAYES_00, 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-f44.google.com Received: from mail-wm0-f44.google.com (HELO mail-wm0-f44.google.com) (74.125.82.44) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 13 Jul 2017 08:41:31 +0000 Received: by mail-wm0-f44.google.com with SMTP id f67so18007621wmh.1 for ; Thu, 13 Jul 2017 01:41:30 -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=fTFcJ/p5NbtDdkFKtaSZpglRdXA4SL44mZErTok/7fg=; b=qLuA4QTklThtEUxcycjo9aWg/sRefIAPhX2impu29JJ8zTEgxrBwUZyzIvM3vz/JJU JZunaTrEM76woXItZF+cxMbBpXOrh6ryCh8eWlqwUKS1FSJA7l60XqjInzQ3U+PtI5X3 LL77fSjupE9Y9raB/OtmqE2tBIgosCIvPwNPQBIMRGDJKzgOj3dMS5zRLtdankxMJlED ZaKHkDJAh0CwNCKJ9T7wqRIyp9bZLUIoXX0JDoxrs6f1jPAmLDV0O4Xn6fbv7r6Ltp62 EV2m+2ecaK49LaUqZ723ieJX5BCzM5qc40vM5D1T+J0sSFSi8pnceY+4uJW9Jp3Nc/Z0 jzEQ== X-Gm-Message-State: AIVw113rNdU6IMuf1qhv86RCUux/h2RoQey7WNpwB7qkXPcQHKcveFOu R5gRpem8nPTElog90GD6mg== X-Received: by 10.28.136.129 with SMTP id k123mr1136552wmd.14.1499935288900; Thu, 13 Jul 2017 01:41:28 -0700 (PDT) Received: from localhost (92.40.249.184.threembb.co.uk. [92.40.249.184]) by smtp.gmail.com with ESMTPSA id 32sm5615294wry.31.2017.07.13.01.41.27 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 13 Jul 2017 01:41:28 -0700 (PDT) From: Richard Sandiford To: gcc-patches@gcc.gnu.org Mail-Followup-To: gcc-patches@gcc.gnu.org, richard.sandiford@linaro.org Subject: [09/77] Add SCALAR_FLOAT_TYPE_MODE References: <8760ewohsv.fsf@linaro.org> Date: Thu, 13 Jul 2017 09:41:26 +0100 In-Reply-To: <8760ewohsv.fsf@linaro.org> (Richard Sandiford's message of "Thu, 13 Jul 2017 09:35:44 +0100") Message-ID: <8737a0n2yx.fsf@linaro.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) MIME-Version: 1.0 This patch adds a macro that extracts the TYPE_MODE and forcibly converts it to a scalar_float_mode. The forcible conversion includes a gcc_checking_assert that the mode is a SCALAR_FLOAT_MODE_P. This becomes important as more static type checking is added by later patches. It has the additional benefit of bypassing the VECTOR_TYPE_P (...) ? vector_type_mode (...) : ... condition in TYPE_MODE; in release builds the new macro is a simple field access. 2017-07-13 Richard Sandiford Alan Hayward David Sherwood gcc/ * tree.h (SCALAR_FLOAT_TYPE_MODE): New macro. * builtins.c (expand_builtin_signbit): Use it instead of TYPE_MODE. * fold-const.c (fold_convert_const_real_from_fixed): Likewise. (native_encode_real): Likewise. (native_interpret_real): Likewise. * hsa-brig.c (emit_immediate_scalar_to_buffer): Likewise. * tree-vrp.c (simplify_float_conversion_using_ranges): Likewise. gcc/cp/ * mangle.c (write_real_cst): Use SCALAR_FLOAT_TYPE_MODE instead of TYPE_MODE. gcc/fortran/ * target-memory.c (size_float): Use SCALAR_FLOAT_TYPE_MODE instead of TYPE_MODE. gcc/objc/ * objc-encoding.c (encode_type): Use SCALAR_FLOAT_TYPE_MODE instead of TYPE_MODE. Index: gcc/tree.h =================================================================== --- gcc/tree.h 2017-06-30 12:50:37.494697187 +0100 +++ gcc/tree.h 2017-07-13 09:18:24.776086502 +0100 @@ -1852,6 +1852,8 @@ #define TYPE_MODE_RAW(NODE) (TYPE_CHECK #define TYPE_MODE(NODE) \ (VECTOR_TYPE_P (TYPE_CHECK (NODE)) \ ? vector_type_mode (NODE) : (NODE)->type_common.mode) +#define SCALAR_FLOAT_TYPE_MODE(NODE) \ + (as_a (TYPE_CHECK (NODE)->type_common.mode)) #define SET_TYPE_MODE(NODE, MODE) \ (TYPE_CHECK (NODE)->type_common.mode = (MODE)) Index: gcc/builtins.c =================================================================== --- gcc/builtins.c 2017-07-13 09:18:21.522430235 +0100 +++ gcc/builtins.c 2017-07-13 09:18:24.772086898 +0100 @@ -5365,7 +5365,8 @@ expand_builtin_adjust_descriptor (tree e expand_builtin_signbit (tree exp, rtx target) { const struct real_format *fmt; - machine_mode fmode, imode, rmode; + scalar_float_mode fmode; + machine_mode imode, rmode; tree arg; int word, bitpos; enum insn_code icode; @@ -5376,7 +5377,7 @@ expand_builtin_signbit (tree exp, rtx ta return NULL_RTX; arg = CALL_EXPR_ARG (exp, 0); - fmode = TYPE_MODE (TREE_TYPE (arg)); + fmode = SCALAR_FLOAT_TYPE_MODE (TREE_TYPE (arg)); rmode = TYPE_MODE (TREE_TYPE (exp)); fmt = REAL_MODE_FORMAT (fmode); Index: gcc/fold-const.c =================================================================== --- gcc/fold-const.c 2017-06-30 12:50:37.496697095 +0100 +++ gcc/fold-const.c 2017-07-13 09:18:24.774086700 +0100 @@ -2040,7 +2040,8 @@ fold_convert_const_real_from_fixed (tree REAL_VALUE_TYPE value; tree t; - real_convert_from_fixed (&value, TYPE_MODE (type), &TREE_FIXED_CST (arg1)); + real_convert_from_fixed (&value, SCALAR_FLOAT_TYPE_MODE (type), + &TREE_FIXED_CST (arg1)); t = build_real (type, value); TREE_OVERFLOW (t) = TREE_OVERFLOW (arg1); @@ -7145,7 +7146,7 @@ native_encode_fixed (const_tree expr, un native_encode_real (const_tree expr, unsigned char *ptr, int len, int off) { tree type = TREE_TYPE (expr); - int total_bytes = GET_MODE_SIZE (TYPE_MODE (type)); + int total_bytes = GET_MODE_SIZE (SCALAR_FLOAT_TYPE_MODE (type)); int byte, offset, word, words, bitpos; unsigned char value; @@ -7390,7 +7391,7 @@ native_interpret_fixed (tree type, const static tree native_interpret_real (tree type, const unsigned char *ptr, int len) { - machine_mode mode = TYPE_MODE (type); + scalar_float_mode mode = SCALAR_FLOAT_TYPE_MODE (type); int total_bytes = GET_MODE_SIZE (mode); unsigned char value; /* There are always 32 bits in each long, no matter the size of Index: gcc/hsa-brig.c =================================================================== --- gcc/hsa-brig.c 2017-06-07 07:42:16.638117371 +0100 +++ gcc/hsa-brig.c 2017-07-13 09:18:24.774086700 +0100 @@ -910,7 +910,7 @@ emit_immediate_scalar_to_buffer (tree va "operands"); return 2; } - unsigned int_len = GET_MODE_SIZE (TYPE_MODE (type)); + unsigned int_len = GET_MODE_SIZE (SCALAR_FLOAT_TYPE_MODE (type)); /* There are always 32 bits in each long, no matter the size of the hosts long. */ long tmp[6]; Index: gcc/tree-vrp.c =================================================================== --- gcc/tree-vrp.c 2017-07-13 09:18:22.943276979 +0100 +++ gcc/tree-vrp.c 2017-07-13 09:18:24.776086502 +0100 @@ -10089,7 +10089,8 @@ simplify_float_conversion_using_ranges ( { tree rhs1 = gimple_assign_rhs1 (stmt); value_range *vr = get_value_range (rhs1); - machine_mode fltmode = TYPE_MODE (TREE_TYPE (gimple_assign_lhs (stmt))); + scalar_float_mode fltmode + = SCALAR_FLOAT_TYPE_MODE (TREE_TYPE (gimple_assign_lhs (stmt))); machine_mode mode; tree tem; gassign *conv; Index: gcc/cp/mangle.c =================================================================== --- gcc/cp/mangle.c 2017-07-02 09:32:32.533745269 +0100 +++ gcc/cp/mangle.c 2017-07-13 09:18:24.773086799 +0100 @@ -1788,7 +1788,7 @@ write_real_cst (const tree value) int i, limit, dir; tree type = TREE_TYPE (value); - int words = GET_MODE_BITSIZE (TYPE_MODE (type)) / 32; + int words = GET_MODE_BITSIZE (SCALAR_FLOAT_TYPE_MODE (type)) / 32; real_to_target (target_real, &TREE_REAL_CST (value), TYPE_MODE (type)); Index: gcc/fortran/target-memory.c =================================================================== --- gcc/fortran/target-memory.c 2017-02-23 19:54:15.000000000 +0000 +++ gcc/fortran/target-memory.c 2017-07-13 09:18:24.774086700 +0100 @@ -46,7 +46,7 @@ size_integer (int kind) static size_t size_float (int kind) { - return GET_MODE_SIZE (TYPE_MODE (gfc_get_real_type (kind)));; + return GET_MODE_SIZE (SCALAR_FLOAT_TYPE_MODE (gfc_get_real_type (kind))); } Index: gcc/objc/objc-encoding.c =================================================================== --- gcc/objc/objc-encoding.c 2017-07-13 09:18:19.145691430 +0100 +++ gcc/objc/objc-encoding.c 2017-07-13 09:18:24.775086601 +0100 @@ -664,7 +664,7 @@ encode_type (tree type, int curtype, int { char c; /* Floating point types. */ - switch (GET_MODE_BITSIZE (TYPE_MODE (type))) + switch (GET_MODE_BITSIZE (SCALAR_FLOAT_TYPE_MODE (type))) { case 32: c = 'f'; break; case 64: c = 'd'; break;