From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 62895 invoked by alias); 18 Dec 2015 12:13: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 62867 invoked by uid 89); 18 Dec 2015 12:13: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=alphabetical, Hx-spam-relays-external:sk:HE1PR08, HX-Microsoft-Antispam-PRVS:sk:HE1PR08, H*RU:sk:HE1PR08 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; Fri, 18 Dec 2015 12:13:45 +0000 Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01lp0177.outbound.protection.outlook.com [213.199.154.177]) (Using TLS) by eu-smtp-1.mimecast.com with ESMTP id uk-mta-23-EHpOQgALQIePw9flcGUAeg-1; Fri, 18 Dec 2015 12:13:39 +0000 Received: from AM3PR08CA0066.eurprd08.prod.outlook.com (10.163.23.162) by HE1PR08MB0858.eurprd08.prod.outlook.com (10.164.53.20) with Microsoft SMTP Server (TLS) id 15.1.355.16; Fri, 18 Dec 2015 12:13:36 +0000 Received: from AM1FFO11FD045.protection.gbl (2a01:111:f400:7e00::169) by AM3PR08CA0066.outlook.office365.com (2a01:111:e400:8854::34) with Microsoft SMTP Server (TLS) id 15.1.361.13 via Frontend Transport; Fri, 18 Dec 2015 12:13:36 +0000 Received: from nebula.arm.com (217.140.96.140) by AM1FFO11FD045.mail.protection.outlook.com (10.174.65.208) with Microsoft SMTP Server (TLS) id 15.1.355.15 via Frontend Transport; Fri, 18 Dec 2015 12:13:36 +0000 Received: from e107456-lin.cambridge.arm.com (10.1.2.79) by mail.arm.com (10.1.106.66) with Microsoft SMTP Server id 14.3.266.1; Fri, 18 Dec 2015 12:13:34 +0000 From: James Greenhalgh To: CC: , , Subject: Backport: [Patch AArch64] Reinstate CANNOT_CHANGE_MODE_CLASS to fix pr67609 Date: Fri, 18 Dec 2015 12:13:00 -0000 Message-ID: <1450440811-2928-1-git-send-email-james.greenhalgh@arm.com> In-Reply-To: References: MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;AM1FFO11FD045;1:99/XEYTRNSebdtgKe8K5ssfItAa0oY32Kc9CgROBX0nohSxeSGEaN+qoi7XkW9gQRdu2nBqg/V4E8WGKgtnkkA42n7mrnsQEhfexs/Zg/Oke77ahVALw/RXc68L3S96A1gvSoYJUrD1Bl9q37RTkol+AueJZCOdj3HWYASQTxFkrLAxhBZh2eSjwXMMKMEChjweixeMQwVcSmENiP/AUpTZwel/GYczD4dDuGnTxkh0dC9flUvXBGl1g2R5kT9U87fyp4tQIWC4YhghjUNlyj6voexsRdtOq+ZyrExC0srTYfZGE3ly/s6gx8x9X7wqbR79PUj0/o4CgJ7H7wBKtJA6eS8IcRTMjviIiPrVMzG4= X-Forefront-Antispam-Report: CIP:217.140.96.140;CTRY:GB;IPV:CAL;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10009020)(979002)(6009001)(2980300002)(438002)(189002)(164054003)(377424004)(199003)(24454002)(6806005)(110136002)(86362001)(50986999)(229853001)(4610100001)(2476003)(2351001)(92566002)(2950100001)(512874002)(1096002)(77096005)(1220700001)(104016004)(11100500001)(5890100001)(76176999)(5008740100001)(26826002)(106466001)(4001150100001)(586003)(189998001)(19580405001)(450100001)(568964002)(87936001)(19580395003)(33646002)(5003600100002)(84326002)(50226001)(36756003)(969003)(989001)(999001)(1009001)(1019001);DIR:OUT;SFP:1101;SCL:1;SRVR:HE1PR08MB0858;H:nebula.arm.com;FPR:;SPF:Pass;PTR:fw-tnat.cambridge.arm.com;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;HE1PR08MB0858;2:sy+LsfZ7aKgQY/SKAR1meUyHpSTneffBx/jR//EJJpwJ0APFYsvcjdmHA6+y4v8Fx3wVbgmEJhz9aMRXnFXHatAe4TjDJYo/7+TBOsNCDdX0zeJWdg/W5XNdYfoAuz68ac9P+ExGCnIKFegDYVdvIw==;3:Qbp0B97QhJSTWREo8IQZ6ryunQl6Eeubm525BGMjk3vf+PCMo8enJ4MXy407gQPCHbgarZCo7eAGwp0yt9olHzauGiC7uTTztLD9SGBe/epYTammJ/lBlLsKlQHX1bsJqHpq65CMe+5uhPEmJSwQVXYwf1wwdksbJBLJhlbURDaDkSbBg6qdiDu0dS5DKc69oF2qMqLdYuceMsJ9rMFYPJfqidioR5V5JZ1+51opKsT4DAGMdtjMp1MaV4ADE6lJE8qzZzgTA7bvMzCaKFZRdw==;25:w4P9lcfJcSrlJbZ/uM1xRxK6mbFeR4LYmvkK7DdCoKzWKYUsfTLwppV4eVJDxo34pU+NrDq8TR4Dgavfap/SW3MpC6+T1t9hkpWbrEuw19H/ltkpTwWd+HGpHYtJ2PW1DeraLBvhcPokY5fkNI9PNkOoXF+6CtXX05BtCc3whElhflD8C7ssFHH6fSlC7PWECG9eAKy7gjmpk0uuFDP1nDlV++4gUBTWdhkydPPzSEWyG/qfYXGydwh8mPUwxEJT5nj91f4RNvtWN6KVuFWi/g==;20:wog1HUZK0XYuiBD6RwaDXvQrJJc3N3C30+CjRKrDHXj8slz6rr+Jss5ozOCZgWJ/PP0eZsND1kX45IN2yNg2s8TS+/njazQW3YY2fvLZepI8Mh2pDan0W++8s9wZP7hi5hlhk68DVSgH7x553Vse/GEsnuP7Y9dozDh8Fcvnk6c= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(8251501001);SRVR:HE1PR08MB0858; NoDisclaimer: True X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(180628864354917); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(520078)(8121501046)(5005006)(3002001)(10201501046);SRVR:HE1PR08MB0858;BCL:0;PCL:0;RULEID:;SRVR:HE1PR08MB0858; X-Microsoft-Exchange-Diagnostics: 1;HE1PR08MB0858;4:JWWmZk3Oq4q4b8cgSUdFVB/uz+kiH8g0O+xThZxK2s8olCnpWZk+F7wOdFGIRUEeTyhA6x/vtNQcVwelNzdANdBP+GybnOecc9rKpFhgoPdAIy9cx5yqcgeU/bf+YsxfT6WkzOGBuQOn1FA18VIDOeQsCzfzZ9Indr78nZVnsfHWPP6fc9H0tOlzndmUcbht/kXbTeGG+bYPsxk+hdZOpF8TLsY/A8KKwVoagbZjm5WG5/xDbNp5MvT4lbREWkHHAjh/ZjobBLZf+LuHh49F/QJHAw8Tvy8QOU6oR8I/ck6rT3msTnxJyGouiM7v+BFFTQ6EQhpIuxeTeu96PKLBplViVArkb8+wDU9e6Gr89oEsTawZmXnn7HA8B/bai7JfxTFAvdUqGkdiJKsuEfak7I+F6vNllC+9gAAePXJpoS/If4EKB1oB7bSxign/3OX3 X-Forefront-PRVS: 07943272E1 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;HE1PR08MB0858;23:7FWBym3WYG9Qk5V1DIzXveRhSUTsJ8SLslweOr+of?= =?us-ascii?Q?9Y7D2qzDAvTKMVaDKvTw5Aldp+Z/xo40dBy6TGeV4tPG/VtzQER8irD3z5XR?= =?us-ascii?Q?3Zqm0TyQZ9F1SF/oipLBogBgLwow9VLvzTClVPR+2eXCggx1LbHyLI/wXXkR?= =?us-ascii?Q?HAgrrzVsBGqwYiJEIGxCJwpxLpVtEQxNgz3+IZInjzAFORS3lOUMnjw/gYLa?= =?us-ascii?Q?Et2d4f7mdW2Iz1ws1C3JSdKTgDBT8BxX5D9rgyx6mzS8aNdJQze5uO6EY3DL?= =?us-ascii?Q?aI79PTxQC8Rcv8+zlPwvNq7VV9LVmYEoeZKAAoShtmN1pkH5WSv9NITXLe7k?= =?us-ascii?Q?xhc6KtLWTYb93YwmMoLLJg6mYEf1fDXvdvIpmk0u6+L1uizE8rZhZLAdRLdG?= =?us-ascii?Q?mV4LUtKH09x84yuR85BAsM2EVva0VWlULEqISCLRdKGS7521cXkdPoBNuR/V?= =?us-ascii?Q?MRDK8w1P+glTpYkr4OK9ffiA4foYIdZakCY4Aky8U50w5YNzt6omDVOZTWT8?= =?us-ascii?Q?WoQTHIaScCY7uIEW2EjTER1RZ15sNhs0/l6ZtuC9XNl1RUP/VxDlDrRjUZqb?= =?us-ascii?Q?UOUE07GWV9TtuiemaFV3arrQ3D/QtGEz58E/OO1+9fuLEEsaNQG9+y9Yq185?= =?us-ascii?Q?qo5ltYVVVQUeaE6JRCaMpcagaAAe6fw7UkINtr0StbEo92M54kXPSvV/jwC0?= =?us-ascii?Q?W9u2FQy7kPlpAenODBNOE+W5U3naqCV4U6Bp+uX7Tv4bYn56MOoEkroV6G1c?= =?us-ascii?Q?ndvu2cQ/FyLN5QjyWxID3RsgtAnC4bLGAXTUYouiFFOuIGEt40zXBopxctAb?= =?us-ascii?Q?JgrXtMh4JGQzvv+IOTO6CP/Ll/nYqp4GqJz/0On5HRzp9UI93mrWo8NH7RhU?= =?us-ascii?Q?FAmZHHS6pON6iHkPwLhbAsym5OSvJuf8fWQpfPB2gkuej8KNDTOWbzgbdR+y?= =?us-ascii?Q?jCT/HqbAC2hQKwx7EQRldRx0dHDaYb5CXvBOJqamhIlelMH8PD2e4M347ex3?= =?us-ascii?Q?fKc+BAxR2mbIuhaBM6eydfZvjn3ZicSK1LYGlCJgqchq/MnnaDZLpIpbaGR4?= =?us-ascii?Q?iJSwacv0MsApPe0SKs6VwiNo0/6yz8YmgkhnIL2NK2tDaLUwfUmZupeVYY1Q?= =?us-ascii?Q?3COZvRdva09aDE24R0ikBcrKgTAh6I4ZIOlp7C284xo3XIBbYskPcuDumr/8?= =?us-ascii?Q?3X8lNYp5vpvPinCqQ+4CDwPwe5/nd26TK07g4OHpVe59/kZYfVLK1NoMQ=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR08MB0858;5:BjvGL1MjUuiMkv/GmGK2YRhefD9mw5Zoy1jPIQXCeynvm4gYoQgeYsxPBSeizkfEJdoZxpyWmVkzmmO3uz7vWGvMaTa2dvHz71ioNduIOpNdEafodLPAfASiE+EvilLtV3N0tz/5YeHIw8MwAqssHA==;24:cS5cnfko1EC9RJOuesjAuEfQXPeKZdE39z9xOsLniIa/a8KlcMo41/LpASXM81LZZUM1TGgFebJqt8ugRJchswG46/9QlBejIoGYIGzkZis=;20:46Oj1OPGFhmkzn4jfI1F8Dq6Jf8S9P2QIxi82zMATj/epDOnIOT+j5Rv0mXsX5Vkmi3Qp5iwrNQnpzPis1kpu92RbVeBFEEqDIZx68RwxEaayN8wXPXK2XyjWkuMj9Ce7LstXPV0exhWM+z300gWQjhhgZ1MFfOOmgf7NyzbVxs= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Dec 2015 12:13:36.6295 (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: HE1PR08MB0858 X-MC-Unique: EHpOQgALQIePw9flcGUAeg-1 Content-Type: multipart/mixed; boundary="------------2.6.4.2.gae996d8" X-IsSubscribed: yes X-SW-Source: 2015-12/txt/msg01869.txt.bz2 --------------2.6.4.2.gae996d8 Content-Type: text/plain; charset=UTF-8; format=fixed Content-Transfer-Encoding: quoted-printable Content-length: 2554 On Mon, Dec 14, 2015 at 11:49:26AM +0000, Marcus Shawcroft wrote: > On 14 December 2015 at 11:01, James Greenhalgh = wrote: > > On Wed, Dec 09, 2015 at 01:13:20PM +0000, Marcus Shawcroft wrote: > >> On 27 November 2015 at 13:01, James Greenhalgh wrote: > >> > >> > 2015-11-27 James Greenhalgh > >> > > >> > * config/aarch64/aarch64-protos.h > >> > (aarch64_cannot_change_mode_class): Bring back. > >> > * config/aarch64/aarch64.c > >> > (aarch64_cannot_change_mode_class): Likewise. > >> > * config/aarch64/aarch64.h (CANNOT_CHANGE_MODE_CLASS): Likew= ise. > >> > * config/aarch64/aarch64.md (aarch64_movdi_low): Use > >> > zero_extract rather than truncate. > >> > (aarch64_movdi_high): Likewise. > >> > > >> > 2015-11-27 James Greenhalgh > >> > > >> > * gcc.dg/torture/pr67609.c: New. > >> > > >> > >> + detailed dicussion. In all other cases, we want to be premissive > >> > >> s/premissive/permissive/ > >> > >> OK /Marcus > > > > Thanks. > > > > This has had a week or so to soak on trunk now, is it OK to backport to= GCC > > 5 and 4.9? > > > > The patch applies as-good-as clean, with only a little bit to fix up in > > aarch64-protos.h to keep alphabetical order, and I've bootstrapped and = tested > > the backports with no issue. > > OK /Marcus > Looking back at the patch just before I hit commit, the 4.9 backport was a little different (as we still have a CANNOT_CHANGE_MODE_CLASS there). We can drop the aarch64-protos.h and aarch64.h changes, and we need to change the sense of the new check, such that we can return true for the case added by this patch, and false for the limited number of other safe cases in 4.9. Bootstrapped on aarch64-none-linux-gnu. OK? Thanks, James --- gcc/ 2015-12-14 James Greenhalgh Backport from mainline. 2015-12-09 James Greenhalgh PR rtl-optimization/67609 * config/aarch64/aarch64.c (aarch64_cannot_change_mode_class): Don't permit word_mode subregs of full vector modes. * config/aarch64/aarch64.md (aarch64_movdi_low): Use zero_extract rather than truncate. (aarch64_movdi_high): Likewise. gcc/testsuite/ 2015-12-14 James Greenhalgh Backport from mainline. 2015-12-09 James Greenhalgh PR rtl-optimization/67609 * gcc.dg/torture/pr67609.c: New. --------------2.6.4.2.gae996d8 Content-Type: text/x-patch; name=0001-Backport-Patch-AArch64-Reinstate-CANNOT_CHANGE_MODE_.patch Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="0001-Backport-Patch-AArch64-Reinstate-CANNOT_CHANGE_MODE_.patch" Content-length: 2954 diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 8153997..5ca38b6 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -8405,6 +8405,18 @@ aarch64_cannot_change_mode_class (enum machine_mode = from, enum machine_mode to, enum reg_class rclass) { + /* We cannot allow word_mode subregs of full vector modes. + Otherwise the middle-end will assume it's ok to store to + (subreg:DI (reg:TI 100) 0) in order to modify only the low 64 bits + of the 128-bit register. However, after reload the subreg will + be dropped leaving a plain DImode store. See PR67609 for a more + detailed dicussion. In some other cases we can be permissive and + return false. */ + if (reg_classes_intersect_p (FP_REGS, rclass) + && GET_MODE_SIZE (to) =3D=3D UNITS_PER_WORD + && GET_MODE_SIZE (from) > UNITS_PER_WORD) + return true; + /* Full-reg subregs are allowed on general regs or any class if they are the same size. */ if (GET_MODE_SIZE (from) =3D=3D GET_MODE_SIZE (to) diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md index 24bb029..d6c6b1e 100644 --- a/gcc/config/aarch64/aarch64.md +++ b/gcc/config/aarch64/aarch64.md @@ -3454,7 +3454,8 @@ =20 (define_insn "aarch64_movdi_low" [(set (match_operand:DI 0 "register_operand" "=3Dr") - (truncate:DI (match_operand:TX 1 "register_operand" "w")))] + (zero_extract:DI (match_operand:TX 1 "register_operand" "w") + (const_int 64) (const_int 0)))] "reload_completed || reload_in_progress" "fmov\\t%x0, %d1" [(set_attr "type" "f_mrc") @@ -3463,9 +3464,8 @@ =20 (define_insn "aarch64_movdi_high" [(set (match_operand:DI 0 "register_operand" "=3Dr") - (truncate:DI - (lshiftrt:TX (match_operand:TX 1 "register_operand" "w") - (const_int 64))))] + (zero_extract:DI (match_operand:TX 1 "register_operand" "w") + (const_int 64) (const_int 64)))] "reload_completed || reload_in_progress" "fmov\\t%x0, %1.d[1]" [(set_attr "type" "f_mrc") diff --git a/gcc/testsuite/gcc.dg/torture/pr67609.c b/gcc/testsuite/gcc.dg/= torture/pr67609.c new file mode 100644 index 0000000..817857d --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr67609.c @@ -0,0 +1,33 @@ +/* { dg-do run } */ + +typedef union +{ + double v[2]; + double s __attribute__ ((vector_size (16))); +} data; + +data reg; + +void __attribute__ ((noinline)) +set_lower (double b) +{ + data stack_var; + double __attribute__ ((vector_size (16))) one =3D { 1.0, 1.0 }; + stack_var.s =3D reg.s; + stack_var.s +=3D one; + stack_var.v[0] +=3D b; + reg.s =3D stack_var.s; +} + +int +main (int argc, char ** argv) +{ + reg.v[0] =3D 1.0; + reg.v[1] =3D 1.0; + /* reg should contain { 1.0, 1.0 }. */ + set_lower (2.0); + /* reg should contain { 4.0, 2.0 }. */ + if ((int) reg.v[0] !=3D 4 || (int) reg.v[1] !=3D 2) + __builtin_abort (); + return 0; +} --------------2.6.4.2.gae996d8--