From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6992 invoked by alias); 20 Sep 2016 12:01:49 -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 6951 invoked by uid 89); 20 Sep 2016 12:01:47 -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,SPF_PASS autolearn=ham version=3.3.2 spammy=optimise, sk:build_p, fpclassify, Optimise X-HELO: eu-smtp-delivery-143.mimecast.com Received: from eu-smtp-delivery-143.mimecast.com (HELO eu-smtp-delivery-143.mimecast.com) (146.101.78.143) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 20 Sep 2016 12:01:37 +0000 Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01lp0247.outbound.protection.outlook.com [213.199.154.247]) (Using TLS) by eu-smtp-1.mimecast.com with ESMTP id uk-mta-59-ok6TtmmgP0iFeiPWRzbCPQ-1; Tue, 20 Sep 2016 13:01:33 +0100 Received: from AM3PR08CA0007.eurprd08.prod.outlook.com (2a01:111:e400:8840::17) by AM3PR08MB0278.eurprd08.prod.outlook.com (2a01:111:e400:8852::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.629.8; Tue, 20 Sep 2016 12:01:31 +0000 Received: from AM1FFO11FD049.protection.gbl (2a01:111:f400:7e00::147) by AM3PR08CA0007.outlook.office365.com (2a01:111:e400:8840::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.629.8 via Frontend Transport; Tue, 20 Sep 2016 12:01:31 +0000 Received: from nebula.arm.com (217.140.96.140) by AM1FFO11FD049.mail.protection.outlook.com (10.174.65.212) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.629.5 via Frontend Transport; Tue, 20 Sep 2016 12:01:31 +0000 Received: from [10.2.206.255] (10.1.2.79) by mail.arm.com (10.1.105.66) with Microsoft SMTP Server id 14.3.294.0; Tue, 20 Sep 2016 13:00:58 +0100 Subject: Re: [PATCH] Optimise the fpclassify builtin to perform integer operations when possible To: Jeff Law , GCC Patches , "jakub@redhat.com" , "rguenther@suse.de" References: <6c97e2e2-7934-00e3-a4ea-ec94a8c26abc@redhat.com> CC: nd From: Tamar Christina Message-ID: Date: Tue, 20 Sep 2016 12:14:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: <6c97e2e2-7934-00e3-a4ea-ec94a8c26abc@redhat.com> 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)(189002)(199003)(377454003)(24454002)(53754006)(4001350100001)(86362001)(64126003)(8936002)(33646002)(65826007)(2201001)(5660300001)(230700001)(31696002)(11100500001)(76176999)(54356999)(189998001)(50986999)(2950100001)(626004)(77096005)(5001770100001)(31686004)(65956001)(586003)(246002)(305945005)(4326007)(65806001)(36756003)(23746002)(92566002)(356003)(47776003)(2906002)(106466001)(7846002)(104016004)(26826002)(83506001)(50466002)(2501003)(8676002)(87936001);DIR:OUT;SFP:1101;SCL:1;SRVR:AM3PR08MB0278;H:nebula.arm.com;FPR:;SPF:Pass;PTR:fw-tnat.cambridge.arm.com;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;AM1FFO11FD049;1:ne9o8ncG8lcStIsSFOcKj5uNW2Keo06cImQgzdl/KIXXkC4cfYcGkxO1Sb1mlNOUXlNbL2c54N96ENXHgdcLSbnqs+AtjNDxxW2KPx71L3EGmVawn1t6aSx2KOuZoACFPabUqCaCd4Vps9h9D6D+nG5fC8e7/JnIYrC8gEAJdakier8vLTN9rflXl/VZSJYuuZwXZ+PqwBWTqh/zznXs+1BORDFrV/xq9VzPMvZO3nXAw7ZSw4Zf1pUJ08yFoFdfqoB+A+FahbS7KjYWR8RlQtIjWmyAcrGm3YoCiTAgy8FBgj/5vuPntZg2E8jTmihfQk9BARqj+OeVT/8369uGD4notsbk2aRjEUZgWK9jtKNoozk11ePzeLMrcnwpiPxLatB/Y4cmBwzvoHGkREn0bNceYEMSAS/lz6gYzy6Y10qK5iNQzOIFs7bny9fDd0t/4J7aOdb7BNKueNqCzHODt2pq0v83vKOqcsFLcifRCFpPhbzmq+sdrcmtoU9GjpK2+gkImPkLMI7JJkqLJU5AdQuyMKvP4wHRo73dYDw46rY/bfnyhv8e9AeUghc8avIAuuPn/zKHpkti7QS+wxeUJdG7r3DLb/VCxNGgWLSikRc= X-MS-Office365-Filtering-Correlation-Id: 7e623c27-39c8-4dbc-1e92-08d3e14ddc97 X-Microsoft-Exchange-Diagnostics: 1;AM3PR08MB0278;2:1q/UoDXLFo/+zU1eed/HC3jMvljxHLhpPOSLq9n+2lqwifjvt9VSNULo6gf+F8aPhUMSz7rvINKA6TF2eIkZT6k65g0KfZWOIquLN/9aQyJtvvGUuGfjwiciyz29ANJWeU+XuO1stfYYhm/9NhEUnarBKjZTAUVXiI/HQmpo2syo0NC9xRzxqd19rXWQiLf5;3:1ZgedS6jkmOnQopb5Z5B9J4EO7Mn5HnB5dgDxexj/7yY5qt/Z+qCBqPuLXn1/6KY+xMqjnR5dkWHoEFC3bmvNpN/R8MPME23dH2SGHDqtG9dlIZAXUEK0jByZ3wiO45DCsf+4vJZSJyhSvmDa9Fx92r3FWFo0WNMAnPSnNk7/cyy4wqPti9eoGYZO6vlWXXjlNswnzfkgloAoViyIBkt0gbizp2oK5W+xkLtV05k9+z5PHtXysNaMiwvrvcUBU3Xussr2NXzis6whFuIwkcpWg==;25:N1neq/2g37pPuQ/VKk4sGyEaE6kGbiNy83YArimTTLVfzABvT4xkFHmDpVfCiZujgzWwzQOEN4DhfGtau5cPgnCZ4iPGVqHZ2eybdzP4dff4qwjYQP2HZaxJOMl4RIjnqRlO21Gsz4qzEHxceBmrAXfxLqG659B95Kw/Gkb5U2TWZgr1cky+soV6omjOfqrLPx/j2M3vXKp+kjFMWihNdEczbUm46RXjqERDIXiohBUaVvhtY9GNmY0cwB2LlM7etGMw4F1AhmG1c2aYgFqfDHmygtYXaiVXKHPPw2T02QXQPN+N1q9V9197SpoVB1tQG7eXg7JFJ63Twjp6mGRFnHdkesE7qcLC0TNINrnMMVZ1c32vMrptbgRvE7AOqTesPLvIl4gtcC4HZNQSgYtT6qkFPXMRCQxlLI6Jde7X758= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(8251501002);SRVR:AM3PR08MB0278; X-Microsoft-Exchange-Diagnostics: 1;AM3PR08MB0278;31:N/QUgwLnR5S0JLYZYeCLmXepOX/ZOy0BChzJ1oo0Qm+GVy/hO9tK6XRrLZSQgwwKFiHKIYPqCOaip0FsdmiKVfKDAV8zVozm5ftHWbnzn/WIipSNB7YI/e9D8R0XxyExVGEHKjvQMBiYmVTSPEO6GdbEatFgLOe1w5hzgKN0PLIdIb5LY6EnWHqCMlscVjswFkhGfNGE/7s2VFZGbzEv7vy2ijSYl3/ziAO8xb9nSCE=;20:RlSOaEkTlN/LljsewoOYPudHJjAyepkn4nhAwM/EenthJOndfzweO0CE5wvbZdfXEYftatHqDNDvT/0VjwCxObZAnwUzDiyB6TEVGERgZ6EWEycuDOV3bG/cVoW+k8fkI6hXWWcHOEm6ud4MWuVQY+Mf+o8u+jioJGoOQjhsr5yo96bwIo84LO7WdPgqxhoySZ8m3XBdb13eSkcnL1JsQq1LaU/+VpwEIyD9vnoM3O67C+GIBknyCddd9by/EC3z NoDisclaimer: True X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(13023025)(13024025)(13020025)(13013025)(8121501046)(5005006)(3002001)(10201501046)(6055026);SRVR:AM3PR08MB0278;BCL:0;PCL:0;RULEID:;SRVR:AM3PR08MB0278; X-Microsoft-Exchange-Diagnostics: 1;AM3PR08MB0278;4:ro0+I5yaw6Lt1rVr/EaaVlMwX8KcdDvwR+c3Kg7Js7tyGvVeJtCOlsYiQJKfoDmS9O2+94VVOfFA+tz5RtB9Ii/oBffywqyfAsXPMNaHzCJvSbOJ6ADpeNDGR46GCODKzAR5xvDIpD1mhILmH/7glsmEqGVAI5dSIHZAGYg9lrvNAWXfYqDn66ZlPgYtEDRiO39xs8ySd5Fiob5Z6QuJLgh5yyBv8iuU0W8ip4xraLeGsY66z3ot5HBQY4MbVh2lg1t2I7s6SMe5Atrp3v5KZcnFQStqEFztAh3vIoUCVar3Zl+kENNnFVMh4TN8pCgMS1QbkLC/CMu6JzJ3JCyXS1fQlWgWy4NcR5zKJCKcXr5Nfg/0OMFnjVwRHiUlY2wl+PRQWkYWuy2/iOgyiW3JeOOZPPR+MC+wVfkHp2xNM3SMGLGgCOPQ/5t40ZbWrLhHZGTds53hrYttxwUX653qZng2JdCayn1UplHfA/uvdrU= X-Forefront-PRVS: 0071BFA85B X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;AM3PR08MB0278;23:6f2X5pnFpvaQIXfFS4s6+aI/Z5DdBRcdbNQwE?= =?Windows-1252?Q?/+MUFSeY36Vr2kOHVRW8fXtBY6H+PNJ3K7RPfU482u+jEw29h80uq2kV?= =?Windows-1252?Q?z9JTa4X7zwRMPwWgZ/FGMzV4FsVUwCL4gwANkTr4LggWw3RnKOtBYsht?= =?Windows-1252?Q?YbnJ55pZGjG04haO9FBReSdMwlS15Th/w1ZFmtz8SZo9gsqVfCDQPn8m?= =?Windows-1252?Q?qRNvOEe1Jc0DIWWOtMqhCVY32cFmMo/8RolNBDQ9YzTMsad9pSaU8Ruf?= =?Windows-1252?Q?JeNMK7avAR7I9EEIVgsxy9MyBscUh5Rhtx1sGsWUfqTB9hO+4RVwKnFh?= =?Windows-1252?Q?NzPlaxQX1cdTH8sPVv82mHGQXsFIbjo/gPpmlcOzY3MwgG9hJwVYt8hb?= =?Windows-1252?Q?g4PBrj+Zb4usWUHt+LJRokFha/H01JKG+TFWCEG0Mypw8+i9XwG3eVWG?= =?Windows-1252?Q?cGo40WoBjG281jeuaUjI911lI+VdYLsNY581oZTjviVynk31ve6Nmavk?= =?Windows-1252?Q?GS/RPmReon0zCm6XLfIO4mHGefeTuTj39UWawS+6AAhzd8dWUqdO7KJd?= =?Windows-1252?Q?IyuYqAZh6FQUda2ICj0JMIOvhh+f3PqT4eKvReGa5VbZEZewrZf7+NGz?= =?Windows-1252?Q?SJgHe8ICBdv5muphcjQgVn62cCTakP2pTi2H4vRIPB+8KiNl+AXuTbTe?= =?Windows-1252?Q?KdmgKl2Gr7h75j7twyMvoB4vRRhgpOow5zGIRdBMFlJEERL1IzdWFNma?= =?Windows-1252?Q?t9hUDYFg0vcEnBQDMz/506s0Fs3IkOipvlmTd70IZP97td9JwsTnTsmt?= =?Windows-1252?Q?4i/xqICC3O1uHA2g6jLJe9vYkIq2VkrVq61z0m2K56bmAhqIlAbUjVNB?= =?Windows-1252?Q?RqUYpfBTiz0o+mQuCheWZwpSp+9XnP95VMuP294+ZRQ6agQwGxAC+GNE?= =?Windows-1252?Q?imHSGFhQH3GMv81NBvKwF5oEUbsqeLoIqWSPO/RtyKz8dx6VsN3v7rnU?= =?Windows-1252?Q?bYGvkkiKXxwdWSP4PcErltzl7fqxBMuetBPtIv3fZr+QfEZQw9iSXyPC?= =?Windows-1252?Q?t5pw//SnQV6uNbPIqeRuAzWI/QxHwIFfJB8esU9otQhFZP3c9IydW41V?= =?Windows-1252?Q?CRG6jjCqcRfuPx0RJzbF17KBLky6H+1/SBVD0weoN15O3Urh/GKYPne7?= =?Windows-1252?Q?6NufNERQWtR6X6IZ/LZTGmvx5W7CxnkyjORugTsD9qxakKEz1cLyDDKp?= =?Windows-1252?Q?1SdQN4WTpPOK0liwR8uZGr3kzGVyVHTsZKa3LXGOK2z8POk1tfrxYKO9?= =?Windows-1252?Q?UC4MFEyHM+x0herWRjrdKcBDA=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;AM3PR08MB0278;6:PfBOunlN7YisxEqgAOhWFthYXnWVP6TsgbwqWodn2urLwMYeSxhq/fhi1mwirF10QXwIrDXjxvevRNXf4TuU2ZF1EDA1G768t+Xg6pbyuFY9BnV9G4OfrByBSlap1ujuDvxxRCW66bGYtGmNi7rDKuOebiSyKVpbUzFVIbybCSGVuQ3W6kpObE34l1ofiSpuKaM7tgIw5Eus2B7XXZVSbw93GMmvnvaSivd092sPUox16WHXJFvQESJvAkMD8Uaz9pBI5D46hhjS3ZhVEpz6uVrE6MmsGX4x5gVPkiOCu3xfZh1plmYCl2LPvxG+4GIwz55R4OO42j8ahsl22jx4TA==;5:m2oe8oebY33Pa5pEDHqqFW3V4OaM91fgUvG5BOx3NfzpW4p7gYwkq8YaXnMDVfjoPwRpABzwApC9AEtX7Ewm7U/5IQ4CWpXd8l3sZRQOxRREAAf9PwA9/+CzEdDEc+w+oQSYN5s1kGuzbvJeJ9Np5A==;24:joC6FEkTsmvDN1GkB2sqgyxPDFMhWEHPdJnwoUQxGcl6bTOxww69xEGGP2eSWqXGC/OEEP0VQm1h6pd8V8VYxxS8MlzE8NeCjrOvLXOLclw=;7:cYAVIVGqoljbV83CTDX+OrmEX/4FuamNV+kjXjI+Fhm9L4kMroqIH7fzdlWMjm7OiroGHRybT1QwJK2jgFxEwiwh/aaLgI+Kdm475l2z39liRI2vMGVJbDwMYyr5BC95g0kzqzV/itWTyj094bGI+Vy4viqBr1s+w/PedkIEq/piVMNcwCTLSkq2OXiw0E3yeGdCucArgQeyZP2qyK19ieRwfLJAhRxwKl2pCe/TBammdwqvAvF6l2dIcMhP0MWWkFQfqyhsYlfm3hfiyRckTORgPQCbUf53p63xG4o4x3LmFWmSuu3TYPTGW82S3AVJ SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;AM3PR08MB0278;20:9Eg/OqZJaF2mWjn4bBNAZgpaHFLCC/gONe1ddKc7uzz/Mmh47bpTHiWt6er5Q3+RupPevXdyNLwLXaK3k36DMzTItn6cPUrFBtZ9ff7GZ1LF5uE7KGhL5Uv7vXO3yXPBPIqtF7hFzv1yj1GBumyTmoq6eiQ7oov1sCYQ0RUsdLI= X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Sep 2016 12:01:31.6654 (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: AM3PR08MB0278 X-MC-Unique: ok6TtmmgP0iFeiPWRzbCPQ-1 Content-Type: text/plain; charset=WINDOWS-1252; format=flowed Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes X-SW-Source: 2016-09/txt/msg01278.txt.bz2 On 16/09/16 20:49, Jeff Law wrote: > On 09/12/2016 10:19 AM, Tamar Christina wrote: >> Hi All, >> + >> + /* Re-interpret the float as an unsigned integer type >> + with equal precision. */ >> + int_arg_type =3D build_nonstandard_integer_type (TYPE_PRECISION=20 >> (type), 0); >> + int_arg =3D fold_build1_loc (loc, INDIRECT_REF, int_arg_type, >> + fold_build1_loc (loc, NOP_EXPR, >> + build_pointer_type (int_arg_type), >> + fold_build1_loc (loc, ADDR_EXPR, >> + build_pointer_type (type), arg))); > Doesn't this make ARG addressable? Which in turn means ARG won't be=20 > exposed to the gimple/ssa optimizers. Or is it the case that when=20 > fpclassify is used its argument is already in memory (and thus=20 > addressable?) > I believe that it is the case that when fpclassify is use the argument=20 is already addressable, but I am not 100% certain. I may be able to do=20 this differently so I'll come back to you on this one. >> + exp, const1)); >> + >> + /* Combine the values together. */ >> + specials =3D fold_build3_loc (loc, COND_EXPR, int_type,=20 >> zero_check, fp_zero, >> + fold_build3_loc (loc, COND_EXPR, int_type, exp_lsb_set, >> + fold_build3_loc (loc, COND_EXPR, int_type,=20 >> mantissa_any_set, >> + HONOR_NANS (mode) ? fp_nan : fp_normal, >> + HONOR_INFINITIES (mode) ? fp_infinite : fp_normal), >> + fp_subnormal)); > So this implies you're running on generic, not gimple, right?=20 > Otherwise you can't generate these kinds of expressions. > Yes this is generic. >> diff --git a/gcc/real.h b/gcc/real.h >> index=20 >> 59af580e78f2637be84f71b98b45ec6611053222..36ded57cf4db7c30c935bdb24219a1= 67480f39c8=20 >> 100644 >> --- a/gcc/real.h >> +++ b/gcc/real.h >> @@ -161,6 +161,15 @@ struct real_format >> bool has_signed_zero; >> bool qnan_msb_set; >> bool canonical_nan_lsbs_set; >> + >> + /* This flag indicates whether the format can be used in the=20 >> optimized >> + code paths for the __builtin_fpclassify function and friends. >> + The format has to have the same NaN and INF representation as=20 >> normal >> + IEEE floats (e.g. exp must have all bits set), most significant=20 >> bit must be >> + sign bit, followed by exp bits of at most 32 bits. Lastly the=20 >> floating >> + point number must be representable as an integer. The base of=20 >> the number >> + also must be base 2. */ >> + bool is_binary_ieee_compatible; >> const char *name; >> }; > I think Joseph has already commented on the contents of the=20 > initializer and a few more cases were we can use the optimized paths. > > However, I do have a general question. There are some targets which=20 > have FPUs that are basically IEEE, but don't support certain IEEE=20 > features like NaNs, denorms, etc. > > Presumably all that's needed is for those targets to define a hook to=20 > describe which checks will always be false and you can check the=20 > hook's return value. Right? > Yes, that should be enough. Not supporting NAN and Infinities is already=20 supported though, but it's tied to the real format rather than a=20 particular target. > > Can you please include some tests to verify you're getting the initial=20 > code generation you want? Ideally there'd be execution tests too=20 > where you generate one of the special nodes, then call the __builtin=20 > and verify that you get the expected results back. The latter in=20 > particular are key since it'll allow us to catch problems much earlier=20 > across the wide variety of targets GCC supports. > I can add some code generation tests. There are I believe already some=20 execution tests, which test both correct and incorrect output. > I think you already had plans to post an updated patch. Please=20 > include the fixes noted above in that update. Yes I will include your feedback in it. I'm currently waiting for some=20 extra performance numbers. Thanks, Tamar