From patchwork Mon Apr 29 18:16:57 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Uros Bizjak X-Patchwork-Id: 240430 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "localhost", Issuer "www.qmailtoaster.com" (not verified)) by ozlabs.org (Postfix) with ESMTPS id E2AA42C00A3 for ; Tue, 30 Apr 2013 04:17:09 +1000 (EST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :mime-version:date:message-id:subject:from:to:content-type; q= dns; s=default; b=v4LJvEC1ILlTHxo3Nhy9WnmKvuUIVrshWS6YkNMytoqeXe QBueLoao0KhbSxjKZZ1+ytVIlQ7/JiQLom1gGQNA8uBReWUOG2FMEgkWZ7brytK9 C/kZM+QbZoXrMIuu2S5NJw5UOWt10cgv4JB92zy8OTCofGFycArZACy8g3lNk= 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 :mime-version:date:message-id:subject:from:to:content-type; s= default; bh=A0oz1Gx3TySiA8dqrfUma/CReOs=; b=SoWi0xrPx4Y0DClTcmNn AwHwRpN2p1qEefgkW5iGhGePnC3py+YravZffuLABInZpbST5i8L73WgCNOUmg/x U2tcaLXcdNmF9eu4YH7QrhEScxnH3DvvayDxhq7DMmUj8r6tk3TwYc+ioXemYWDY Gi2WwUb92+NHAVBRfiSSO84= Received: (qmail 7459 invoked by alias); 29 Apr 2013 18:17:00 -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 7449 invoked by uid 89); 29 Apr 2013 18:17:00 -0000 X-Spam-SWARE-Status: No, score=-2.5 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, RCVD_IN_HOSTKARMA_YE, SPF_PASS, TW_ZJ autolearn=ham version=3.3.1 Received: from mail-ob0-f179.google.com (HELO mail-ob0-f179.google.com) (209.85.214.179) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Mon, 29 Apr 2013 18:16:59 +0000 Received: by mail-ob0-f179.google.com with SMTP id oi10so5688880obb.10 for ; Mon, 29 Apr 2013 11:16:58 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.182.125.200 with SMTP id ms8mr23660928obb.67.1367259418046; Mon, 29 Apr 2013 11:16:58 -0700 (PDT) Received: by 10.182.156.49 with HTTP; Mon, 29 Apr 2013 11:16:57 -0700 (PDT) Date: Mon, 29 Apr 2013 20:16:57 +0200 Message-ID: Subject: [PATCH, i386]: Fix PR57098, ICE with -mcmodel=large -msse4 and __builtin_shuffle() From: Uros Bizjak To: "gcc-patches@gcc.gnu.org" X-Virus-Found: No Hello! 2013-04-29 Uros Bizjak PR target/57098 * config/i386/i386.c (ix86_expand_vec_perm): Validize constant memory. 2013-04-29 Uros Bizjak PR target/57098 * gcc.target/i386/pr57098.c: New test. Tested on x86_64-pc-linux-gnu {,-m32} and committed to mainline SVN. The patch will be backported to 4.7 and 4.8 branches. Uros. Index: config/i386/i386.c =================================================================== --- config/i386/i386.c (revision 198401) +++ config/i386/i386.c (working copy) @@ -20559,7 +20559,7 @@ ix86_expand_vec_perm (rtx operands[]) vec[i * 2 + 1] = const1_rtx; } vt = gen_rtx_CONST_VECTOR (maskmode, gen_rtvec_v (w, vec)); - vt = force_const_mem (maskmode, vt); + vt = validize_mem (force_const_mem (maskmode, vt)); t1 = expand_simple_binop (maskmode, PLUS, t1, vt, t1, 1, OPTAB_DIRECT); @@ -20756,7 +20756,7 @@ ix86_expand_vec_perm (rtx operands[]) for (i = 0; i < 16; ++i) vec[i] = GEN_INT (i/e * e); vt = gen_rtx_CONST_VECTOR (V16QImode, gen_rtvec_v (16, vec)); - vt = force_const_mem (V16QImode, vt); + vt = validize_mem (force_const_mem (V16QImode, vt)); if (TARGET_XOP) emit_insn (gen_xop_pperm (mask, mask, mask, vt)); else @@ -20767,7 +20767,7 @@ ix86_expand_vec_perm (rtx operands[]) for (i = 0; i < 16; ++i) vec[i] = GEN_INT (i % e); vt = gen_rtx_CONST_VECTOR (V16QImode, gen_rtvec_v (16, vec)); - vt = force_const_mem (V16QImode, vt); + vt = validize_mem (force_const_mem (V16QImode, vt)); emit_insn (gen_addv16qi3 (mask, mask, vt)); } Index: testsuite/gcc.target/i386/pr57098.c =================================================================== --- testsuite/gcc.target/i386/pr57098.c (revision 0) +++ testsuite/gcc.target/i386/pr57098.c (working copy) @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target lp64 } */ +/* { dg-options "-msse4 -mcmodel=large" } */ + +typedef int V __attribute__((vector_size(16))); + +void foo (V *p, V *mask) +{ + *p = __builtin_shuffle (*p, *mask); +}