From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 279713857B9B; Tue, 18 Jul 2023 10:39:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 279713857B9B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1689676746; bh=8HNw3Qhy3EZVh1+dX9NSKExBXGsBlR+S6KbvIH1QIdA=; h=From:To:Subject:Date:In-Reply-To:References:From; b=c+tEEtPXEy4o88YA8kdrPpb8diSe9ZK6uwTIXzOgBnFD29hzYu4SjWa35By/mrHIl K+BOLGyzCvD4j9v3GJnrBYOH9ljq908pCRx2DzAyv5cuh4dyZpuJxA8Txl4tI5K5Yu Hmz1fBTBhjFT8fPnPG3r+xRUV6TFga4lrROn6xmE= From: "rguenth at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug target/106952] Missed optimization: x < y ? x : y not lowered to minss Date: Tue, 18 Jul 2023 10:39:05 +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: 13.0 X-Bugzilla-Keywords: missed-optimization X-Bugzilla-Severity: normal X-Bugzilla-Who: rguenth at gcc dot gnu.org X-Bugzilla-Status: NEW X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: 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=3D106952 --- Comment #4 from Richard Biener --- With the proposed patches for PR88540 and PR105715 I get with -O3 -msse4.1 intersection: .LFB2: .cfi_startproc movss .LC0(%rip), %xmm5 pxor %xmm2, %xmm2 movss (%rdi), %xmm4 movss 12(%rsi), %xmm1 movss 12(%rdi), %xmm0 divss %xmm2, %xmm5 movss (%rsi), %xmm3 subss %xmm4, %xmm1 subss %xmm4, %xmm3 pxor %xmm4, %xmm4 mulss %xmm0, %xmm1 mulss %xmm0, %xmm3 movaps %xmm1, %xmm0 cmpnltss %xmm2, %xmm0 blendvps %xmm0, %xmm1, %xmm4 movaps %xmm3, %xmm0 cmpnltss %xmm2, %xmm0 pxor %xmm2, %xmm2 blendvps %xmm0, %xmm3, %xmm2 movss 16(%rsi), %xmm0 minss %xmm5, %xmm3 minss %xmm5, %xmm1 movss 4(%rdi), %xmm5 minss %xmm4, %xmm2 movss 16(%rdi), %xmm4 subss %xmm5, %xmm0 maxss %xmm3, %xmm1 movss 4(%rsi), %xmm3 subss %xmm5, %xmm3 mulss %xmm4, %xmm0 movss 8(%rdi), %xmm5 mulss %xmm4, %xmm3 movaps %xmm2, %xmm4 maxss %xmm0, %xmm4 minss %xmm1, %xmm0 maxss %xmm3, %xmm2 minss %xmm1, %xmm3 movss 8(%rsi), %xmm1 subss %xmm5, %xmm1 maxss %xmm3, %xmm0 movss 20(%rsi), %xmm3 minss %xmm4, %xmm2 movss 20(%rdi), %xmm4 subss %xmm5, %xmm3 mulss %xmm4, %xmm1 movaps %xmm2, %xmm5 mulss %xmm4, %xmm3 movaps %xmm2, %xmm4 maxss %xmm1, %xmm4 minss %xmm0, %xmm1 movaps %xmm3, %xmm2 maxss %xmm3, %xmm5 minss %xmm0, %xmm2 minss %xmm5, %xmm4 maxss %xmm1, %xmm2 comiss %xmm4, %xmm2 seta %al ret there's the existing issue that RTL conditional move expansion doesn't preserve the equality of constants for _33 =3D t2_34 < 0.0; _12 =3D _33 ? 0.0 : t2_34; but it emits two loads from the constant pool for 0.0 here which in the x86 backend fail to be recognized as min/max.=