From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 680D13858416; Fri, 15 Mar 2024 05:59:28 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 680D13858416 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1710482368; bh=YOfzMXX7tOUQGytor/ZZPWYikJV3NRAmrpXYftXPBXg=; h=From:To:Subject:Date:In-Reply-To:References:From; b=eNgdS7n7ZuLTEFQ0/gwE5vmd5JHC1eN/ezhPR1f+YmmXfEltVDWhF9fJ3VUceRJP6 j9e2xNKmUbyhedp8CrAf2JYjmAVVlMr0HO+ML/KjZxUXLHnaNYT5hD2cD2lIIu56MY f6aA5fQUOGYTTMsajTGxzsBegjlpUqodbrXCmaf4= From: "prathamesh3492 at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug target/114323] [14 Regression] MVE vector load intrinsic miscompiled since r14-5622-g4d7647edfd7d98 Date: Fri, 15 Mar 2024 05:59:27 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: target X-Bugzilla-Version: 14.0 X-Bugzilla-Keywords: wrong-code X-Bugzilla-Severity: normal X-Bugzilla-Who: prathamesh3492 at gcc dot gnu.org X-Bugzilla-Status: ASSIGNED X-Bugzilla-Resolution: X-Bugzilla-Priority: P1 X-Bugzilla-Assigned-To: clyon at gcc dot gnu.org X-Bugzilla-Target-Milestone: 14.0 X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: cc Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 List-Id: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D114323 prathamesh3492 at gcc dot gnu.org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |prathamesh3492 at gcc dot = gnu.org --- Comment #3 from prathamesh3492 at gcc dot gnu.org --- Just to expand on previous comments: Before patch, input to dse is: uint32x4_t D.13560; const uint32_t D.13545[4]; uint32x4_t V0; __simd128_uint32_t _7; : # .MEM_2 =3D VDEF <.MEM_1(D)> D.13545 =3D *.LC0; # .MEM_8 =3D VDEF <.MEM_2> _7 =3D __builtin_mve_vld1q_uv4si (&D.13545); # .MEM_6 =3D VDEF <.MEM_8> D.13545 =3D{v} {CLOBBER(eos)}; # VUSE <.MEM_6> return _7; In this case, we have following virtual def-use chain: .MEM_1(D) -> .MEM_2 -> .MEM_8 -> .MEM_6 However after patch, input to dse is: const uint32_t D.13539[4]; uint32x4_t V0; : # .MEM_2 =3D VDEF <.MEM_1(D)> D.13539 =3D *.LC0; V0_3 =3D vld1q_u32 (&D.13539); # .MEM_5 =3D VDEF <.MEM_2> D.13539 =3D{v} {CLOBBER(eos)}; # VUSE <.MEM_5> return V0_3; There's a missing use of MEM_2 in call to vld1q_u32, and since the only use of MEM_2 now is in clobber statement, dse considers it as a dead store, and simplifies it to: : V0_3 =3D vld1q_u32 (&D.13539); # .MEM_5 =3D VDEF <.MEM_1(D)> D.13539 =3D{v} {CLOBBER(eos)}; # VUSE <.MEM_5> return V0_3; thus passing uninitialized pointer to vld1q_u32. Thanks, Prathamesh=