From patchwork Thu Nov 24 16:00:28 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Greenhalgh X-Patchwork-Id: 83952 Delivered-To: patch@linaro.org Received: by 10.182.1.168 with SMTP id 8csp235927obn; Thu, 24 Nov 2016 08:01:21 -0800 (PST) X-Received: by 10.84.135.34 with SMTP id 31mr6843539pli.50.1480003281647; Thu, 24 Nov 2016 08:01:21 -0800 (PST) Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id p27si11452231pli.313.2016.11.24.08.01.21 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 24 Nov 2016 08:01:21 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-return-442582-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; spf=pass (google.com: domain of gcc-patches-return-442582-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-442582-patch=linaro.org@gcc.gnu.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:cc:subject:date:message-id:mime-version:content-type; q=dns; s=default; b=IuPvNE3qmGF2UBySfWRBHUEhZ6dGjPcasMbZHC4my2cP78xf8q JpO4Yklsmo4ibm1lZbmM8UmK3AjYPnoH4C1VMkqnroCn73Po2a9LwPe4anggeQqj owaEURvmAL4sF9N8qb7869WYVB01TRg8lPvoWrDRnj9t5zRwpyE6so9tY= 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:cc:subject:date:message-id:mime-version:content-type; s= default; bh=Qh2PHfPCY/kOobnd4v0lAykkskk=; b=stKH+ffPvdPaPAtZH48o 0pjIYfnmcy8B7tt7JdRHlzLoUqTBZ4zvRIpVyIzDlFCLKUWkm80bh6OMwmVc5FVl laeyPsj2uXzmSXvMG5nOyCVHsD8jQdWr1ZV+ptq6img4163G0WILs14Kvqrawr67 GUen5bcHrfWqcA0cw2n2wTY= Received: (qmail 8529 invoked by alias); 24 Nov 2016 16:01:06 -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 8504 invoked by uid 89); 24 Nov 2016 16:01:05 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 spammy=promotions, D*r, impose, H*MI:james X-Spam-User: qpsmtpd, 3 recipients X-HELO: EUR01-DB5-obe.outbound.protection.outlook.com Received: from mail-db5eur01on0073.outbound.protection.outlook.com (HELO EUR01-DB5-obe.outbound.protection.outlook.com) (104.47.2.73) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 24 Nov 2016 16:00:55 +0000 Received: from DB4PR08CA0002.eurprd08.prod.outlook.com (10.161.12.12) by VI1PR08MB0446.eurprd08.prod.outlook.com (10.162.16.140) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.734.8; Thu, 24 Nov 2016 16:00:49 +0000 Received: from AM1FFO11FD021.protection.gbl (2a01:111:f400:7e00::181) by DB4PR08CA0002.outlook.office365.com (2a01:111:e400:9853::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.747.10 via Frontend Transport; Thu, 24 Nov 2016 16:00:48 +0000 Authentication-Results: spf=pass (sender IP is 217.140.96.140) smtp.mailfrom=arm.com; gcc.gnu.org; dkim=none (message not signed) header.d=none; gcc.gnu.org; dmarc=bestguesspass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 217.140.96.140 as permitted sender) receiver=protection.outlook.com; client-ip=217.140.96.140; helo=nebula.arm.com; Received: from nebula.arm.com (217.140.96.140) by AM1FFO11FD021.mail.protection.outlook.com (10.174.64.210) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.734.4 via Frontend Transport; Thu, 24 Nov 2016 16:00:48 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:; UpperCasedChecksum:; SizeAsReceived:775; Count:11 Received: from e107456-lin.cambridge.arm.com (10.1.2.79) by mail.arm.com (10.1.105.66) with Microsoft SMTP Server id 14.3.294.0; Thu, 24 Nov 2016 16:00:33 +0000 From: James Greenhalgh To: CC: , , , , Subject: [Patch i386] PR78509 - TARGET_C_EXCESS_PRECISION should not return "unpredictable" for EXCESS_PRECISION_TYPE_STANDARD Date: Thu, 24 Nov 2016 16:00:28 +0000 Message-ID: <1480003228-20257-1-git-send-email-james.greenhalgh@arm.com> MIME-Version: 1.0 X-IncomingHeaderCount: 11 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:217.140.96.140; IPV:CAL; SCL:-1; CTRY:GB; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(2980300002)(438002)(199003)(377424004)(189002)(6666003)(39380400001)(246002)(568964002)(39410400001)(189998001)(33646002)(6916009)(2351001)(106466001)(26826002)(110136003)(5660300001)(4001150100001)(7846002)(305945005)(38730400001)(8936002)(50986999)(104016004)(356003)(50226002)(86362001)(8676002)(5890100001)(36756003)(4326007)(2906002)(4610100001)(84326002)(626004)(39060400001)(77096005)(512874002)(92566002)(2476003)(39400400001)(39390400001); DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR08MB0446; H:nebula.arm.com; FPR:; SPF:Pass; PTR:fw-tnat.cambridge.arm.com; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; AM1FFO11FD021; 1:mYd8RPgM2HaDPhKs9n0Z4u/vn8mM8JH+2+lhD/hejo0M5t3kYK8Py1dY6n2C2iEA1OHlQrYORoDOfg8p9Ky7sVpk8b2lmulXPUBQp5wEXCDQTXgvSmuwpe+qK95b+qz0GaTDfQCrNHyDicMY8mGUO81lY6+fhWa/O2s+C+7zvr0ykB4Y4j0fKiosGBXYlUl7TktmjJNN2JObQNySGshpyY5zs2mxKLsoveA3QJ8oJd0jVpP+7r7LYMYtnZOAOC2ykjpjNo6lvzXgpMycQBuyZfH9NnvEvXKdZPRqx53bsgzh/zbjLo7lqBhWY/09pkdzUYwL/lTnOLOkinb8tGQQm2WliKrk6IiI2WZWncySJlmG7G2veT0MW2KmUwBgdvmMWVH1Imgtq/LbraC25o3BtgGLuXZIQsr5pYY+dU4yLEjYRyN8xCaBCALasz5i7SoqFbWCAAqMXXnQC/etVWx6nFq51tlWmJo6/sMt0qh4mL1CMGxb0b8fsuw9hTzasc0QeL1LqjKPZHcAhvD5KECwl4i0lsdl84WUod8uRzh25n5o9yr0pmTSVw6l31G3bsXjjMM6KE7o25fmfPHJFm8/8A== X-Microsoft-Exchange-Diagnostics: 1; VI1PR08MB0446; 2:LCnXIfRIF30dnhTo/1xSzfKpdDrWBBo3YwqRFBWT+llG2kjlsTQC1o7IkpWPiR/nq1aDzFRLX2lC/IhT/ESARX+y1fBqkx990W7XmIDSe58+z/fScwDH9k/XtItoULh5vqOJz/3a8H1ndGIjrAWDRaS/uMoniQNX7C8pOl88W4c=; 3:62vzq0KQy5NSatznoEzr753fLIYU6STxfbTlrJHAyKWhyvCc+HJK7ss30fYdmMdx8ByjCv0voRtnJLDzPmIStDEjCWcBeV/UaZ8snZ7wzP8FOShGa4GGPTtC/xw1NrSvMu+Ey01fwlgWAm1aEgTri16hF7o9vi8FkjTriJIbg66Tb1aBPDziJiEpneqj469WVh//fFyvp7Wt+UvoV5l86l6ELcJsm7I7BJGvbXiFZOQgc0NhRdiljt9JhXMnJGVNTsfzpvCO8cziZa16Vr74NjspkorGz/3hLEw3modKDAk= X-MS-Office365-Filtering-Correlation-Id: 159e0807-0370-4e99-d328-08d414830ec0 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(8251501002); SRVR:VI1PR08MB0446; X-Microsoft-Exchange-Diagnostics: 1; VI1PR08MB0446; 25:/d1Z7GjsSBkAWj5pfR6m/3AFFAD5upscWz5Bzbvr7iul9Eyg8UvSeXZRc4ixmjljkicfGG4NGRvMcGQ8QJrC8bsrpVCbo+tKtxIj+jKznJS1VqzTEVhpXHvttZpvN1MWA3xm8Ri9DRE5BX5z0g50CIu2qICk3lXkx/4TMlTYQQbW5PelEozJp+B2ngJphAIi5I6Tz9t2ejUjufagEIZ7qe0+gBW7bbkWZLxsjWqrAPfqk3ARRMrQ0gGNQEPGDfxdU1DTZSIhhn0o8yt7NfAgCwsCHX0VgRkqN9Edyd3+DRfd5acRlcK3RaavCuw9+ZrvxD/psFwToERWpSPgQHxl+w5xr2aNuDyRyDLQv5Sh2SN02hXjXT18wbS3uWvO6scHWBNlvwdoNjKRI6aajeJlANmWlthJGeBCjwlh9yI2i6zX1LwM530Q+PPAiYWI9BXlkm2CvW10iNm9yQ1PZm+JaTlzxaNDXQuGt+annts4Y3oD0qzJbH8xV2AXC3AkGvpo; 31:11J8HHEk9Mhywvq/k8uq1sNK5c0YwrcsSJ33bokOskt36oKOs/iU7NAdXHqXqnzIZvMvI3odGPHrVNJnPV+5YaepnbxB+GN1CDsJoaHswgMivnhgkgZ8MWlk6FUb37UC4MdmagglEZxMJOBFThoItDq8BrtV1h8omv/jGU0YEMXMeOIGzwzprYI9XbL4c9uOqs301c1cMIUxljql84BNTcsfmBzT5W7KGQS80irobEKQnIm8/nBsU5C1KTF9X1bp0fW0LUujiLW3lvTBJXlxnboQkmQDP8BPHpqXwvHy5eL0NPkmgBVoi7SEmiZTgs6jVTPmK/odBU61UkFHrwifOBYy35U15tiBcoLwlGCVY9M= NoDisclaimer: True X-Microsoft-Exchange-Diagnostics: 1; VI1PR08MB0446; 20:z2ywaq+p84zySC4vG+RHJJ94EoxYavRQc5wPyh5fXRt34XR/KrZQ+/D1pTsI2D3S+v0XxUdRHctfX48r1V+UeFYWzPIaN7usQTsYw/rhfDHhjgzDy7HJ7SmUsnvDWhI7nV8Lxm1bcTb8Fwz//p+oAHOZu2FtFqVClfyJn/QPdx7B1Er0Q8dskzbgVDy9blpwiOtOERkdQq9Dl1Xpk93xHP6mPyAojY6LTZQBkNR0sqPsUAcy1gAXZ+1gJdyiHrix X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(180628864354917); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(102415395)(6060326)(6045199)(6040361)(601004)(2401047)(8121501046)(13020025)(5005006)(13013025)(13023025)(13024025)(10201501046)(3002001)(6055026)(6061324)(6041248)(20161123562025)(20161123564025)(20161123555025)(20161123558021)(20161123560025)(6072148); SRVR:VI1PR08MB0446; BCL:0; PCL:0; RULEID:; SRVR:VI1PR08MB0446; X-Microsoft-Exchange-Diagnostics: 1; VI1PR08MB0446; 4:WsK5o3M6Zrr/HtvrrnJxgDGam/Q/wpsBg8oPnn9C5w1+Xjk1OIj4TC1Zamk5wt7iMloH3j5GbHI7r5eEW1kuLqhzJqEvsga4qqF8jyCdqnIFqycyuujKqMBnJJ8pOTwByMWTlw1YyEXsWrGMYnPl66DG0BCWiDuFpp2VeeurnWit1IFWlOW1cs/pmtaUp5L4ptkNjAnbKbJzMhcE/x4A+DBD1W4y1a2bfYxhEeAdZuoMMijS97IXtHF9jOv0ppZSihLJI+TMuwNrACRvnBHp/UQ90JNLcNJ+J3E0HkCErTfnTInwkgLsfu9IFwuIEIGJjZn++8pwN7XbVPd+M/QrifDnCxXFW1xWuLcWquVsbpKlqremwuNtQ7uuFKsefLzYg/FSq3IDDkQQ9ZFM3emq6ZTHWqCG1FkVl7sELNlfiebid44H/GSMPgLJnc3n1b4juIf+NzP4wpiCKa9uQSNWLtwI2pr895szPwCCK/yCRt8/QQUYZf+2e9S8uTToTD+ADg2889n0BssWga3OoAtAhePFFluK7fCKhhA33yzJrlsLmg1MBQ+LnrXHDqDMCfCLrgd+j5W7FILdoVCUc0TH3d7/QiSGOj6Ujs1fdXNrpESv7KPNdiBQriMh+nWl0tluCFl+h2eF6Oz9Tj/WrZDFQIBwotQC7+c06jhUgNYw4+3fq0LyTdbmizAU+gxb6GhJuHp6BZDAPjUmRnxqhUdW8zuU0sfJjMfsiWboBZhdXp6jl1iyLPEmYSeb2CT/ui/6ACT313+S0dr6sh/2k1dnfv33Ar3CVbigiGd1GJDjIZlPVWpeopwRT1aOFPlbYYfC X-Forefront-PRVS: 0136C1DDA4 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR08MB0446; 23:O+xFJPrqPiJIYNhPu+pnQ0hbGMvs3dm3aKBp9OFAk?= =?us-ascii?Q?uZggeFELDzdAyJWL/MiSU70TmGw02e09lMEcxl6PBqYt2H57SJidfT94fVXz?= =?us-ascii?Q?/vUljBOnzBKqEMOnvbbuScFPdGT1yHMAgPioUjpFKg0Ao2qlB9Rxv6g2ZUuv?= =?us-ascii?Q?YIICveJrOPW4emCX6iEVz2CJvXwWcoslxOPjdkktIfsYlli4omz1O5IfpHOU?= =?us-ascii?Q?g/5g0cG327GLMUgQOh9R9lFzz3+d9WLDepgit/9N/o0KT6ERHQrgPCRTRKHF?= =?us-ascii?Q?jhHBI8E/N+FIHesHys5mW8OI/9OzTbh9s2kinzm5E4SxK8dYOwa6hOJ2c101?= =?us-ascii?Q?zHcfXxfd0SZj/2uhlgNcH8HrB93/Js7vcViK1SkpW7vaS7bMNlNSzkumFPTW?= =?us-ascii?Q?8pMqWw0JIIcxMcjnkp+/LkYnnRPGrRqjyvfG6JB2zkVoW2+Q8AI1JeGrJwY/?= =?us-ascii?Q?jeR3+TPsylsFBCkv+rym3y0CUfyhk6xt7iy742jzYaL6fcGLKdRLI1nkCw5c?= =?us-ascii?Q?/KtqDwj0gT5a1vovCyyCZYdXy3QFIWWUd9mneXjPhCp+C+yXZPAnJqrueYkL?= =?us-ascii?Q?dua25dSlrShj8VwJ3fqBOaUiLHpo9oDxzniZoFov0h5v/NL/Wfr6yCWSE4/8?= =?us-ascii?Q?dyHLdytiS5JlB3I8fNAS13pDBLUOb3b1poaeARyCExDg1ms+o66EH2Wdx5rZ?= =?us-ascii?Q?74HAYd1eYURmM5XtKlwT0+3SrWkuLZATP94Ml8odFvFyRF0XQSBgaOdrN0Mv?= =?us-ascii?Q?KJn8w419TRQVf3uqqT1LXYi4XZdhSFLDs8t7zaZxroNLbxQ0i01kIxuC3uu/?= =?us-ascii?Q?VD0lWvHxjEQAqnX2DxHZWJrFo1XLP7uKeaOzVT+fYOxtC7WWMFDB2jtPA/jk?= =?us-ascii?Q?9vbEgSgMdRSy+c/IkbqPJA/uHU/ahRq15WkPMlZbIAy/Q3NfgCAc5FBrkMBd?= =?us-ascii?Q?kJTjeRpkLMjdmMrzuS4tDv1iy3GST/wQ8pFkHKbwt1YVIIsdwFFlqSfYJ6pA?= =?us-ascii?Q?iYvs3mUaxtgayp7nbJbTBXNGFmYrk5R14mcQYFbF6us+j3RgpGNdNKj056iQ?= =?us-ascii?Q?jshuAA/2eHLQen4sCVjsg+ToggpVq5hsLXAjKZxKb7nNrn2y1VdnsLd1ER9/?= =?us-ascii?Q?f7oX8KiKue8zuE9bmhCbKuANRigEVpfNHxvnfvGBBSp52CvKYmgEw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; VI1PR08MB0446; 6:kLxlMW1yb/SDsYROG8pvAvLDziTNj5CkC9gIS3+2Td4BzaGod/Ky0ChNncnpKauQzQCJk2a1vkA1y9QxjrLFQHup897S36P8wQ4F3TjKsydZYSdnFdJjTvyDlR3vqsQC1cydGkFwPb54hoveMsKRc8deU7Xu9k16RYHQ5vxHdcpgHhtswEifT5+UOSG834Ey7uQeE07egOyuZusnvgrHKMO8U8pXntaJHI8eUb8qBz2ImF34oysgS2VuaJ/MvRv4QYPQ7SnnbNnUkqG2YJVccZgIkyfPr5xwnBzdt2piM4x381E/LgYkltAQiBiKSmqB0aGVbEkSplsV28P+z651s4v293n2jByuE3AeJIjXWNLcPxmduMguEpvnQXxu0GZZ; 5:CUrwLjnmDzj2cW7weTsKtVe6NvrzDq82yhI/A64pTAzaNny678s0hjXro/aybSCcwD8HazVH9ZXWPK6+ozWjKAoToL+pdl+OJg1lA478gwgjvIWGjk4r9PyJORqhMKNNz0Y39GTJWnCcTS18RMJMF8Y5MzLU8QTZsrl2+FH5bVs=; 24:tMotMhZlHtYJ2IHreHChdciwqIo96ic51CL7Dno1WkLDDWmTHlLhl0JnjwXGCjQEfqUbvmH1fH+tyHpZ3AtSBHg5iJ9dajxWQ2EpMnJe3ew= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR08MB0446; 7:iGZdlwLUUv1NOPdfO9xL8Y8zA9QlBLisZ2bTmIKYg7LgdOKgF68J+xp5je+gFE2FkKqPQs9R5Mqn1P61T6SLfoNu2K3Gy4zNmB7S/UsxkYQIwnsOa8q16bDOLVIW8cj62ZdVugUVKkrHmAlT1ZxNTC5Q2AsYFimtf6spxbRTe3oGJKE275zD1vf2ofPwdYeOfXcr7F2CuWgOC/ZblE/mJQcWFgFPbyQTt2cAZHGpr9kHcD42KQ7nCuVKm63+3fchbm8bLhDtN6BlUg4Lkkyoi1c/yd5gdq+sP1wUU91fAs8iJXFBf7C5JNu8pU0/AvPlINL9SS206Z1qFguC0iE0QY0z7+M0EagB5wlelriKUjc= X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Nov 2016 16:00:48.4531 (UTC) X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[217.140.96.140]; Helo=[nebula.arm.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB0446 X-IsSubscribed: yes Hi, PR78509 occurs because a target should never return FLT_EVAL_METHOD_UNPREDICTABLE from TARGET_C_EXCESS_PRECISION when the TYPE argument to that hook is EXCESS_PRECISION_TYPE_STANDARD or EXCESS_PRECISION_TYPE_FAST. When TYPE is one of these two modes, the target is being asked which explicit excess precision should be applied by tree.c. It doesn't make sense for this to be "unpredictable". tree.c can only apply predictable explicit excess precision. Contrast that with EXCESS_PRECISION_TYPE_IMPLICIT, which can be unpredictable. The logic in config/i386/i386.c:i386_excess_precision should be correct for EXCESS_PRECISION_TYPE_IMPLICIT, but we should not return FLT_EVAL_METHOD_UNPREDICTABLE for the EXCESS_PRECISION_TYPE_STANDARD case, for the reasons above. Rather, we want to impose no explicit excess precision promotions if we are going to be unpredictable anyway - so return FLT_EVAL_METGHOD_PROMOTE_TO_FLOAT. By rearranging the logic of the cascade of else if stataments above, we can make that the default case without duplicating logic. I've bootstrapped and tested this on x86-64 without any issues, confirmed that it fixes the previous ICE, and tested the output before my patch set, and after this patch, with the options suggested by Jakub in the PR: -fdump-tree-gimple -m32 -msse2 -mno-80387 -fexcess-precision=standard -fdump-tree-gimple -m32 -msse2 -mfpmath=387+sse -fexcess-precision=standard -fdump-tree-gimple -m32 -msse2 -mfpmath=387 -fexcess-precision=standard -fdump-tree-gimple -m32 -msse2 -mfpmath=sse -fexcess-precision=standard -fdump-tree-gimple -m32 -msse -mno-sse2 -mfpmath=sse -fexcess-precision=standard With no differences. I've also updated the documentation to make it clear that returning FLT_EVAL_METHOD_UNPREDICTABLE is not supported. OK? Thanks, James --- 2016-11-24 James Greenahlgh PR target/78509 * config/i386/i386.c (i386_excess_precision): Do not return FLT_EVAL_METHOD_UNPREDICTABLE when "type" is EXCESS_PRECISION_TYPE_STANDARD. * target.def (excess_precision): Document that targets should not return FLT_EVAL_METHOD_UNPREDICTABLE when "type" is EXCESS_PRECISION_TYPE_STANDARD or EXCESS_PRECISION_TYPE_FAST. Fix typo in first sentence. * doc/tm.texi: Regenerate. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 3ccee08..843331b 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -51022,17 +51022,26 @@ ix86_excess_precision (enum excess_precision_type type) case EXCESS_PRECISION_TYPE_IMPLICIT: /* Otherwise, the excess precision we want when we are in a standards compliant mode, and the implicit precision we - provide can be identical. */ + provide would be identical were it not for the unpredictable + cases. */ if (!TARGET_80387) return FLT_EVAL_METHOD_PROMOTE_TO_FLOAT; - else if (TARGET_MIX_SSE_I387) - return FLT_EVAL_METHOD_UNPREDICTABLE; - else if (!TARGET_SSE_MATH) - return FLT_EVAL_METHOD_PROMOTE_TO_LONG_DOUBLE; - else if (TARGET_SSE2) - return FLT_EVAL_METHOD_PROMOTE_TO_FLOAT; - else - return FLT_EVAL_METHOD_UNPREDICTABLE; + else if (!TARGET_MIX_SSE_I387) + { + if (!TARGET_SSE_MATH) + return FLT_EVAL_METHOD_PROMOTE_TO_LONG_DOUBLE; + else if (TARGET_SSE2) + return FLT_EVAL_METHOD_PROMOTE_TO_FLOAT; + } + + /* If we are in standards compliant mode, but we know we will + calculate in unpredictable precision, return + FLT_EVAL_METHOD_FLOAT. There is no reason to introduce explicit + excess precision if the target can't guarantee it will honor + it. */ + return (type == EXCESS_PRECISION_TYPE_STANDARD + ? FLT_EVAL_METHOD_PROMOTE_TO_FLOAT + : FLT_EVAL_METHOD_UNPREDICTABLE); default: gcc_unreachable (); } diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index bd82039..ebcadac 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -948,7 +948,7 @@ Do not define this macro if it would never modify @var{m}. @end defmac @deftypefn {Target Hook} {enum flt_eval_method} TARGET_C_EXCESS_PRECISION (enum excess_precision_type @var{type}) -Return a value, with the same meaning as @code{FLT_EVAL_METHOD} C that describes which excess precision should be applied. @var{type} is either @code{EXCESS_PRECISION_TYPE_IMPLICIT}, @code{EXCESS_PRECISION_TYPE_FAST}, or @code{EXCESS_PRECISION_TYPE_STANDARD}. For @code{EXCESS_PRECISION_TYPE_IMPLICIT}, the target should return which precision and range operations will be implictly evaluated in regardless of the excess precision explicitly added. For @code{EXCESS_PRECISION_TYPE_STANDARD} and @code{EXCESS_PRECISION_TYPE_FAST}, the target should return the explicit excess precision that should be added depending on the value set for @option{-fexcess-precision=@r{[}standard@r{|}fast@r{]}}. +Return a value, with the same meaning as the C99 macro @code{FLT_EVAL_METHOD} that describes which excess precision should be applied. @var{type} is either @code{EXCESS_PRECISION_TYPE_IMPLICIT}, @code{EXCESS_PRECISION_TYPE_FAST}, or @code{EXCESS_PRECISION_TYPE_STANDARD}. For @code{EXCESS_PRECISION_TYPE_IMPLICIT}, the target should return which precision and range operations will be implictly evaluated in regardless of the excess precision explicitly added. For @code{EXCESS_PRECISION_TYPE_STANDARD} and @code{EXCESS_PRECISION_TYPE_FAST}, the target should return the explicit excess precision that should be added depending on the value set for @option{-fexcess-precision=@r{[}standard@r{|}fast@r{]}}. Note that unpredictable explicit excess precision does not make sense, so a target should never return @code{FLT_EVAL_METHOD_UNPREDICTABLE} when @var{type} is @code{EXCESS_PRECISION_TYPE_STANDARD} or @code{EXCESS_PRECISION_TYPE_FAST}. @end deftypefn @deftypefn {Target Hook} machine_mode TARGET_PROMOTE_FUNCTION_MODE (const_tree @var{type}, machine_mode @var{mode}, int *@var{punsignedp}, const_tree @var{funtype}, int @var{for_return}) diff --git a/gcc/target.def b/gcc/target.def index efcc336..85a0ac0 100644 --- a/gcc/target.def +++ b/gcc/target.def @@ -5466,9 +5466,9 @@ DEFHOOK_UNDOC DEFHOOK (excess_precision, - "Return a value, with the same meaning as @code{FLT_EVAL_METHOD} C that\ - describes which excess precision should be applied. @var{type} is\ - either @code{EXCESS_PRECISION_TYPE_IMPLICIT},\ + "Return a value, with the same meaning as the C99 macro\ + @code{FLT_EVAL_METHOD} that describes which excess precision should be\ + applied. @var{type} is either @code{EXCESS_PRECISION_TYPE_IMPLICIT},\ @code{EXCESS_PRECISION_TYPE_FAST}, or\ @code{EXCESS_PRECISION_TYPE_STANDARD}. For\ @code{EXCESS_PRECISION_TYPE_IMPLICIT}, the target should return which\ @@ -5477,7 +5477,11 @@ DEFHOOK @code{EXCESS_PRECISION_TYPE_STANDARD} and\ @code{EXCESS_PRECISION_TYPE_FAST}, the target should return the\ explicit excess precision that should be added depending on the\ - value set for @option{-fexcess-precision=@r{[}standard@r{|}fast@r{]}}.", + value set for @option{-fexcess-precision=@r{[}standard@r{|}fast@r{]}}.\ + Note that unpredictable explicit excess precision does not make sense,\ + so a target should never return @code{FLT_EVAL_METHOD_UNPREDICTABLE}\ + when @var{type} is @code{EXCESS_PRECISION_TYPE_STANDARD} or\ + @code{EXCESS_PRECISION_TYPE_FAST}.", enum flt_eval_method, (enum excess_precision_type type), default_excess_precision)