From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16949 invoked by alias); 2 Mar 2015 11:06:34 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 16908 invoked by uid 48); 2 Mar 2015 11:06:31 -0000 From: "jgreenhalgh at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug rtl-optimization/65235] Simplifying vec_select of vec_concat miscompiles when first element of vec_concat is const_int Date: Mon, 02 Mar 2015 11:06:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: rtl-optimization X-Bugzilla-Version: 5.0 X-Bugzilla-Keywords: wrong-code X-Bugzilla-Severity: normal X-Bugzilla-Who: jgreenhalgh at gcc dot gnu.org X-Bugzilla-Status: NEW X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: ktkachov at gcc dot gnu.org X-Bugzilla-Target-Milestone: 4.8.5 X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: cf_gcctarget bug_status cf_reconfirmed_on cc cf_gcchost everconfirmed Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-SW-Source: 2015-03/txt/msg00114.txt.bz2 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65235 James Greenhalgh changed: What |Removed |Added ---------------------------------------------------------------------------- Target|aarch64 |aarch64*-*-* Status|UNCONFIRMED |NEW Last reconfirmed| |2015-03-02 CC| |jgreenhalgh at gcc dot gnu.org Host| |*-*-* Ever confirmed|0 |1 --- Comment #7 from James Greenhalgh --- The tescase from comment 5 fails for me at -O3 on an aarch64-none-elf cross compiler (r221086), this also fails for native aarch64-none-linux-gnu. As with Kyrill, I see: (insn 16 15 17 2 (set (reg:V2DI 80 [ D.2809 ]) (vec_concat:V2DI (reg:DI 95 [ D.2812 ]) (reg:DI 77 [ D.2806 ]))) reduced.c:19 1386 {aarch64_combine_internaldi} (expr_list:REG_DEAD (reg:DI 95 [ D.2812 ]) (expr_list:REG_DEAD (reg:DI 77 [ D.2806 ]) (expr_list:REG_EQUAL (vec_concat:V2DI (reg:DI 95 [ D.2812 ]) (const_int 4503599627370498 [0x10000000000002])) (nil))))) (insn 17 16 18 2 (set (reg:DI 96 [ D.2806 ]) (vec_select:DI (reg:V2DI 80 [ D.2809 ]) (parallel [ (const_int 0 [0]) ]))) reduced.c:14 1372 {aarch64_get_lanev2di} (expr_list:REG_DEAD (reg:V2DI 80 [ D.2809 ]) (nil))) ---- Combine: Trying 16 -> 17: Successfully matched this instruction: (set (reg:DI 96 [ D.2806 ]) (reg:DI 77 [ D.2806 ])) --- Which is bogus, the correct rewrite would be to: (set (reg:DI 96 [ D.2806 ]) (reg:DI 95 [ D.2812 ]))