{"id":2222873,"url":"http://patchwork.ozlabs.org/api/1.1/patches/2222873/?format=json","web_url":"http://patchwork.ozlabs.org/project/gcc/patch/20260413222006.3862501-7-andrew.pinski@oss.qualcomm.com/","project":{"id":17,"url":"http://patchwork.ozlabs.org/api/1.1/projects/17/?format=json","name":"GNU Compiler Collection","link_name":"gcc","list_id":"gcc-patches.gcc.gnu.org","list_email":"gcc-patches@gcc.gnu.org","web_url":null,"scm_url":null,"webscm_url":null},"msgid":"<20260413222006.3862501-7-andrew.pinski@oss.qualcomm.com>","date":"2026-04-13T22:20:06","name":"[GCC17-PATCH,6/6] phiprop: skip over clobbers [PR116823]","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"e6dba8583c9048095b765cf816524c5b71de7d43","submitter":{"id":91428,"url":"http://patchwork.ozlabs.org/api/1.1/people/91428/?format=json","name":"Andrew Pinski","email":"andrew.pinski@oss.qualcomm.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/gcc/patch/20260413222006.3862501-7-andrew.pinski@oss.qualcomm.com/mbox/","series":[{"id":499758,"url":"http://patchwork.ozlabs.org/api/1.1/series/499758/?format=json","web_url":"http://patchwork.ozlabs.org/project/gcc/list/?series=499758","date":"2026-04-13T22:20:03","name":"Improve Phiprop slightly","version":1,"mbox":"http://patchwork.ozlabs.org/series/499758/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2222873/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2222873/checks/","tags":{},"headers":{"Return-Path":"<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>","X-Original-To":["incoming@patchwork.ozlabs.org","gcc-patches@gcc.gnu.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","gcc-patches@gcc.gnu.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256\n header.s=qcppdkim1 header.b=otQf+D6a;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.a=rsa-sha256 header.s=google header.b=iB7qYT+O;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=38.145.34.32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)","sourceware.org;\n\tdkim=pass (2048-bit key,\n unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256\n header.s=qcppdkim1 header.b=otQf+D6a;\n\tdkim=pass (2048-bit key,\n unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.a=rsa-sha256 header.s=google header.b=iB7qYT+O","sourceware.org; dmarc=none (p=none dis=none)\n header.from=oss.qualcomm.com","sourceware.org;\n spf=pass smtp.mailfrom=oss.qualcomm.com","server2.sourceware.org;\n arc=none smtp.remote-ip=205.220.180.131"],"Received":["from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fvhmY5HM4z1y2d\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 14 Apr 2026 08:25:01 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id B58194BA2E1C\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 13 Apr 2026 22:24:59 +0000 (GMT)","from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com\n [205.220.180.131])\n by sourceware.org (Postfix) with ESMTPS id 973A64BA2E29\n for <gcc-patches@gcc.gnu.org>; Mon, 13 Apr 2026 22:20:19 +0000 (GMT)","from pps.filterd (m0279870.ppops.net [127.0.0.1])\n by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 63DLD8U5395284\n for <gcc-patches@gcc.gnu.org>; Mon, 13 Apr 2026 22:20:19 GMT","from mail-pj1-f71.google.com (mail-pj1-f71.google.com\n [209.85.216.71])\n by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4dh870r58e-1\n (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT)\n for <gcc-patches@gcc.gnu.org>; Mon, 13 Apr 2026 22:20:18 +0000 (GMT)","by mail-pj1-f71.google.com with SMTP id\n 98e67ed59e1d1-35fb6cd0879so1433150a91.2\n for <gcc-patches@gcc.gnu.org>; Mon, 13 Apr 2026 15:20:18 -0700 (PDT)","from xeond2.wrightpinski.org ([98.97.32.212])\n by smtp.gmail.com with ESMTPSA id\n 41be03b00d2f7-c79219f55c4sm12129600a12.22.2026.04.13.15.20.16\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Mon, 13 Apr 2026 15:20:16 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org B58194BA2E1C","OpenDKIM Filter v2.11.0 sourceware.org 973A64BA2E29"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 973A64BA2E29","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 973A64BA2E29","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776118819; cv=none;\n b=hnjb2K9Iau+ZTDn7FkbM6OK4TtTH0v1gGGt5OglPdTIxQlH/aU+TaESlG7sbraBVWDP7Xi1OcAcMC4jL0x34UqVbU7iukc/Dnp3pu3BNOQ1hV114TnwlHEE5B3fd/yK6nY0xP+0aVKBUIizf5PjSJiFdr92IFvR1nYeOJhIpvi0=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776118819; c=relaxed/simple;\n bh=5ybkkCw9voXiEoYgdvv2RI5SWYIaJRDbUPMmCEIsahM=;\n h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID:\n MIME-Version;\n b=gNVXULenosJs4wCx3O+bcJKPrgpRvmpfASBVv2GTFEeKWmkv3/HGVgFvfGUgiF9Q5nVLCAENiW7HoE7KswkSczkfraZZ8m7aFXd0NGqptZi/VR3dnc6fH5Ne506dsj/l7yOme5OZZhkv3EiCnWCwPsn2aJ1GGPq7irjjp1gm6dQ=","ARC-Authentication-Results":"i=1; server2.sourceware.org","DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=\n cc:content-transfer-encoding:date:from:in-reply-to:message-id\n :mime-version:references:subject:to; s=qcppdkim1; bh=7N9EXBE507W\n rnqQaOeBjJ80Mfp2DjEs5uAHYrYkC/SI=; b=otQf+D6akwu/4Qgyk8mZgPEBpk1\n YkGuyXLE2rsCKPJGSP33KvjAp9hJU7RlzjTPWTAI1AekYC/n624ECFZjwIZlE+wM\n PtZe8uCJaS212yICIBYmeTdzKvcMD8N5hIjVPD9d1OwrCGA2Kwzab7/x8M2tbJdd\n ohM96FR9zbtcP0UydGqtRS5rI/qz0B5k0/6ghNZdY8U5JYM2OXC4c3WJfMfHbEY3\n 0unL9zCw+KyeX43+yY3wGbJ1cM2SMP5znXv2kDW7XlzIlTYRDWWs0YO/hW23uUYz\n YP4pc51hvltXc5pl1VkLAXLkyfaAfelkFmX3NV6R7kzd4eD1oKXVJdBKW/A==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=oss.qualcomm.com; s=google; t=1776118818; x=1776723618; darn=gcc.gnu.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n :message-id:reply-to;\n bh=7N9EXBE507WrnqQaOeBjJ80Mfp2DjEs5uAHYrYkC/SI=;\n b=iB7qYT+OWpXaumR+Sg8y00aWdvXF6ewsV2Uv4gkGVq1YTpHeFv8J/UPYm9rrYWmTke\n o7/BnwsUBAaWUVOv0Yhap8Ez5KRdu8rTk93RkGe0J+FVYlExIcIeY5dVuMtd7IQJlfHQ\n 96NiuyZg7hFeADn9Kz5/3mukl8sXy+E6PVQ3KzH47/b/g35b8rgYzq6Edd+gCMdXFXxU\n qV+BvXgwKQX/ZwyWNB8rVkwfQbptNKPEN2g1EQxirQ59wBWd0nk4+1jK8dBfzRSYvWSa\n Ewy2tvTc+yMVcfM8kinfL/d0U19iM86kNokxvthpOQqO7joVWUFIF+e4MWkQr4XXAPlk\n XHqw=="],"X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776118818; x=1776723618;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=7N9EXBE507WrnqQaOeBjJ80Mfp2DjEs5uAHYrYkC/SI=;\n b=kxASooMom+6ytB74vOnrHhwalMAazsSxBcEXrQ3osqBj3xJmwzLOFJYpucCYMO1mVn\n M1tPGO7eB7AZRcK1E0QvY7LEIOHv/rb+22DcgopPiFCGtthvtFoysCqIF7+9N8D8qy0D\n EuVcQmPVjpVMjLoHLvYfMvYjG7KREpMCECTey6MAXSTrX4ql0D3YU5XQmGNufsZWXhEO\n AeomLvFkU535S0eTurVAgf9A5RqjsU/BhCvOR/Exa9VRvJuErcEI78EyGv95k8uE8iJo\n WKjTPhqhZ7TxS4rW0aFZDCd49pbDaqq+fCPNJn5ANhgDahKoH1Pt7inTQblICR4CXiQS\n veAg==","X-Gm-Message-State":"AOJu0YzyGFXlod1ziksgwv5a2+8SvhhPggY2zstkOtwPf9YCvIE+ihKi\n kfkaF+IFDdfUFAvxUwBXywV/a9fxkrbKukzcAYcDHbN8AtVovU6WawEwbwClukIQUIdu/KltVek\n 7Lgq/qnvl9SqMd9xhB6jIlHEdcqccKqOyrzsWZgXUEoo5J6eO60XRt6vZw07pSdX3LjgA","X-Gm-Gg":"AeBDiett6JlkWChw5YlIPA3wZkIO4vhVVgY9ac7+ePtBNJtVCYO9wMoje3OcIsOnOP3\n bYbc+HVVRKcNOCq8DpBfAcwtv2lp1UiO7V5V3EmyIvZPCFw0fSbOEDndUbOoCJSAcumcFcZ/i/v\n h/5FZuU0yOwcCKeJ/wK7MaHViaJv2wQ2kwMLr9PQhEPoc/AeskfwqBEcFwaAYZcDJSzodJkeMuO\n 44whtCYFTIfSy66+Mcl53msb/+2Kw05teDloiAPsgav0RZ4b+Zc1XlhHC1OFtLxaKFUyTVU+7h+\n sPLqPTKf0WaI6l9imGa0sjvFlM4cLj03oFravmG/FvfYTsBlPuKFr+z5879w9SrPO8l0XL28L3Y\n A8KeslgihedqG3YMdjU5477AU/qVCb7uROodKj6Vr8AgGpUCc","X-Received":["by 2002:a17:90b:5283:b0:35c:cba:3453 with SMTP id\n 98e67ed59e1d1-35e428452e1mr14689588a91.22.1776118817501;\n Mon, 13 Apr 2026 15:20:17 -0700 (PDT)","by 2002:a17:90b:5283:b0:35c:cba:3453 with SMTP id\n 98e67ed59e1d1-35e428452e1mr14689569a91.22.1776118816892;\n Mon, 13 Apr 2026 15:20:16 -0700 (PDT)"],"From":"Andrew Pinski <andrew.pinski@oss.qualcomm.com>","To":"gcc-patches@gcc.gnu.org","Cc":"Andrew Pinski <andrew.pinski@oss.qualcomm.com>","Subject":"[GCC17-PATCH 6/6] phiprop: skip over clobbers [PR116823]","Date":"Mon, 13 Apr 2026 15:20:06 -0700","Message-ID":"<20260413222006.3862501-7-andrew.pinski@oss.qualcomm.com>","X-Mailer":"git-send-email 2.43.0","In-Reply-To":"<20260413222006.3862501-1-andrew.pinski@oss.qualcomm.com>","References":"<20260413222006.3862501-1-andrew.pinski@oss.qualcomm.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","X-Proofpoint-ORIG-GUID":"N30K7idW5-UaGmvCqZK-NW3vtySQI7Bn","X-Proofpoint-GUID":"N30K7idW5-UaGmvCqZK-NW3vtySQI7Bn","X-Proofpoint-Spam-Details-Enc":"AW1haW4tMjYwNDEzMDIxOSBTYWx0ZWRfX9xuXPCN7v2Rj\n E4DtbLZdeejTJQxgVW16734z2umLnvNnbMZ6CY9Zg4afi2l7tBpCgKfFdJTcR4bx/YVi5b6y7H0\n MOrKwRKdRSMJb+Jshd3FwwNeRRdF0G/SyC4sQjawZLyhOWI1vvPzgzGRELyq91GxnLsoHTkopCz\n LTHBy4l4OegjL56wiTXFbdXpg056FQVrWOjUXwwbJfP0EEIExO7YB4vQPtehsYbrWL4XJWU9ua9\n iJgEMfs+Ho/UavVXFW2Kk1zRkF0zE/P2Qj11DMGztDArdhjiMbEKG/VkR1Td9lI8o9t+gXOW9B/\n V+0L2vYQcriqf2eDLTpTHKGMfhAqSqYEnwN1vBfiTryjGrFfBWQMjGZIDxqVE69V+3N42eVN15I\n zFmmDdMYxL7eRi0ErExATQtAWRtd9B0STbw+iHupp4eeLrzx/6bb4y9P8tPYfpOTF7HRfQ99Oia\n IjaS/NNgu99048Mv8RQ==","X-Authority-Analysis":"v=2.4 cv=MK9QXsZl c=1 sm=1 tr=0 ts=69dd6c23 cx=c_pps\n a=UNFcQwm+pnOIJct1K4W+Mw==:117 a=i7c1TCcCr6Kt3kgLFmYdbA==:17\n a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22\n a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=CCpqsmhAAAAA:8\n a=COk6AnOGAAAA:8 a=EUspDBNiAAAA:8 a=UAdcmf8fguwvBhtfojsA:9\n a=uKXjsCUrEbL0IQVhDsJ9:22 a=ul9cdbp4aOFLsgKbc677:22 a=TjNXssC_j7lpFel5tvFf:22","X-Proofpoint-Virus-Version":"vendor=baseguard\n engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49\n definitions=2026-04-13_03,2026-04-13_04,2025-10-01_01","X-Proofpoint-Spam-Details":"rule=outbound_notspam policy=outbound score=0\n impostorscore=0 lowpriorityscore=0 priorityscore=1501 adultscore=0\n clxscore=1015 suspectscore=0 spamscore=0 bulkscore=0 malwarescore=0\n phishscore=0 classifier=typeunknown authscore=0 authtc= authcc=\n route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604070000\n definitions=main-2604130219","X-BeenThere":"gcc-patches@gcc.gnu.org","X-Mailman-Version":"2.1.30","Precedence":"list","List-Id":"Gcc-patches mailing list <gcc-patches.gcc.gnu.org>","List-Unsubscribe":"<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>","List-Archive":"<https://gcc.gnu.org/pipermail/gcc-patches/>","List-Post":"<mailto:gcc-patches@gcc.gnu.org>","List-Help":"<mailto:gcc-patches-request@gcc.gnu.org?subject=help>","List-Subscribe":"<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"},"content":"Like the already approved patch at\nhttps://inbox.sourceware.org/gcc-patches/20240924161312.1556293-2-quic_apinski@quicinc.com/\nbut reworked to fit into the new simplified code and\nalso fixed a bug noticed for aggregates.\n\nAggregates include a store when doing phiprop so we need to\ncheck if there are also loads between the original store/load\nand the clobber we are skipping. Like the skipping of the\nstore case, I didn't see this happening enough to add the\nextra checks. I did add a testcase (phiprop-5.C) which checks\nthis.\n\n\tPR tree-optimization/116823\n\ngcc/ChangeLog:\n\n\t* tree-ssa-phiprop.cc (can_handle_load): Skip past\n\tclobbers for !aggregate.\n\ngcc/testsuite/ChangeLog:\n\n\t* g++.dg/tree-ssa/phiprop-2.C: New test.\n\t* g++.dg/tree-ssa/phiprop-4.C: New test.\n\t* g++.dg/tree-ssa/phiprop-5.C: New test.\n\nSigned-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>\n---\n gcc/testsuite/g++.dg/tree-ssa/phiprop-2.C | 23 +++++++++++++++\n gcc/testsuite/g++.dg/tree-ssa/phiprop-4.C | 30 +++++++++++++++++++\n gcc/testsuite/g++.dg/tree-ssa/phiprop-5.C | 36 +++++++++++++++++++++++\n gcc/tree-ssa-phiprop.cc                   | 34 +++++++++++++++++++--\n 4 files changed, 120 insertions(+), 3 deletions(-)\n create mode 100644 gcc/testsuite/g++.dg/tree-ssa/phiprop-2.C\n create mode 100644 gcc/testsuite/g++.dg/tree-ssa/phiprop-4.C\n create mode 100644 gcc/testsuite/g++.dg/tree-ssa/phiprop-5.C","diff":"diff --git a/gcc/testsuite/g++.dg/tree-ssa/phiprop-2.C b/gcc/testsuite/g++.dg/tree-ssa/phiprop-2.C\nnew file mode 100644\nindex 00000000000..e3388d1d157\n--- /dev/null\n+++ b/gcc/testsuite/g++.dg/tree-ssa/phiprop-2.C\n@@ -0,0 +1,23 @@\n+/* { dg-do compile } */\n+/* { dg-options \"-O1 -fdump-tree-phiprop1-details -fdump-tree-release_ssa\" } */\n+\n+/* PR tree-optimization/116823 */\n+/* The clobber on a should not get in the way of phiprop here even if\n+   this is undefined code. */\n+/* We should have MIN_EXPR early on then too. */\n+\n+static inline\n+const int &c(const int &d, const int &e) {\n+  if (d < e)\n+    return d;\n+  return e;\n+}\n+\n+int g(int i, struct f *ff)\n+{\n+  const int &a = c(i, 10);\n+  return a;\n+}\n+/* { dg-final { scan-tree-dump-times \"Inserting PHI for result of load\" 1 \"phiprop1\"} } */\n+/* { dg-final { scan-tree-dump-times \"MIN_EXPR\" 1 \"release_ssa\"} } */\n+\ndiff --git a/gcc/testsuite/g++.dg/tree-ssa/phiprop-4.C b/gcc/testsuite/g++.dg/tree-ssa/phiprop-4.C\nnew file mode 100644\nindex 00000000000..b630148faa5\n--- /dev/null\n+++ b/gcc/testsuite/g++.dg/tree-ssa/phiprop-4.C\n@@ -0,0 +1,30 @@\n+/* { dg-do compile } */\n+/* { dg-options \"-O2 -fno-tree-sra -fdump-tree-phiprop-details\" } */\n+/* PR tree-optimization/123120 */\n+/* Make sure the store to *e conflicts with the store to *d */\n+\n+\n+struct s1\n+{\n+  int a;\n+};\n+\n+void f(int *);\n+\n+void g(struct s1 i, struct s1 *d, struct s1 *e)\n+{\n+  const struct s1 t = {10};\n+  const struct s1 *a;\n+  struct s1 t1 = {2};\n+  if (t.a < i.a)\n+    a = &t;\n+  else\n+    a = &i;\n+  *e = t1;\n+  t1 = *a;\n+  *d = t1;\n+}\n+\n+/* { dg-final { scan-tree-dump-not \"Inserting PHI for result of load\" \"phiprop1\"} } */\n+/* { dg-final { scan-tree-dump-not \"Inserting PHI for result of load\" \"phiprop2\"} } */\n+\ndiff --git a/gcc/testsuite/g++.dg/tree-ssa/phiprop-5.C b/gcc/testsuite/g++.dg/tree-ssa/phiprop-5.C\nnew file mode 100644\nindex 00000000000..5a3a04dfaa4\n--- /dev/null\n+++ b/gcc/testsuite/g++.dg/tree-ssa/phiprop-5.C\n@@ -0,0 +1,36 @@\n+/* { dg-do compile } */\n+/* { dg-options \"-O2 -fdump-tree-phiprop-details\" } */\n+/* PR tree-optimization/116823 */\n+/* Make sure the store to *d conflicts with the load from d->a; */\n+\n+\n+struct s1\n+{\n+  int a;\n+};\n+\n+void f(int *);\n+\n+int g(struct s1 i, struct s1 *d, struct s1 *e)\n+{\n+  int t3;\n+  struct s1 t1 = {2};\n+  const struct s1 t = {10};\n+  const struct s1 *a;\n+  {\n+    int t67;\n+    f(&t67);\n+    if (t.a < i.a)\n+      a = &t;\n+    else\n+      a = &i;\n+  }\n+  t3 = d->a;\n+  *d = *a;\n+  return t3;\n+}\n+\n+\n+/* { dg-final { scan-tree-dump-not \"Inserting PHI for result of load\" \"phiprop1\"} } */\n+/* { dg-final { scan-tree-dump-not \"Inserting PHI for result of load\" \"phiprop2\"} } */\n+\ndiff --git a/gcc/tree-ssa-phiprop.cc b/gcc/tree-ssa-phiprop.cc\nindex bfafb8fddbd..500b6d5983c 100644\n--- a/gcc/tree-ssa-phiprop.cc\n+++ b/gcc/tree-ssa-phiprop.cc\n@@ -258,6 +258,22 @@ can_handle_load (gimple *load_stmt,\n   if (vphi)\n     {\n       tree vphi_res = gimple_phi_result (vphi);\n+      /* Try to see if the store does not effect the load.  */\n+      gimple *other_store = SSA_NAME_DEF_STMT (vuse);\n+\n+      /* Skip over clobbers in the same bb as the use\n+\t as they don't interfere with loads.\n+\t This only works for non-aggregates as aggregates have\n+\t a store which might clobbered now by this clobber.  */\n+      while (!aggregate\n+\t     && !SSA_NAME_IS_DEFAULT_DEF (vuse)\n+\t     && gimple_clobber_p (other_store)\n+\t     && gimple_bb (other_store) == bb)\n+\t{\n+\t  vuse = gimple_vuse (other_store);\n+\t  other_store = SSA_NAME_DEF_STMT (vuse);\n+\t}\n+\n       /* If the vuse on the load is the same as the vphi,\n \t there are no stores inbetween.  */\n       if (vuse == vphi_res)\n@@ -267,8 +283,6 @@ can_handle_load (gimple *load_stmt,\n \t and it is not worth the check. */\n       if (aggregate)\n \treturn NULL_TREE;\n-      /* Try to see if the store does not effect the load.  */\n-      gimple *other_store = SSA_NAME_DEF_STMT (vuse);\n       if (is_a<gphi*> (other_store))\n \treturn NULL_TREE;\n       /* There is only one store between the phi and the load. */\n@@ -284,11 +298,25 @@ can_handle_load (gimple *load_stmt,\n   /* If there is a common incoming vuse then that must be checked first.  */\n   if (up_vuse)\n     return vuse == up_vuse ? vuse : NULL_TREE;\n+  gimple *def_stmt = SSA_NAME_DEF_STMT (vuse);\n+\n+  /* Skip over clobbers in the same bb as the use\n+     as they don't interfere with loads.\n+     This only works for non-aggregates as aggregates have\n+     a store which might clobbered now by this clobber.  */\n+  while (!aggregate\n+\t && !SSA_NAME_IS_DEFAULT_DEF (vuse)\n+\t && gimple_clobber_p (def_stmt)\n+\t && gimple_bb (def_stmt) == bb)\n+  {\n+    vuse = gimple_vuse (def_stmt);\n+    def_stmt = SSA_NAME_DEF_STMT (vuse);\n+  }\n+\n   /* If the load does not have a store beforehand,\n      then we can do the load in conditional. */\n   if (SSA_NAME_IS_DEFAULT_DEF (vuse))\n     return vuse;\n-  gimple *def_stmt = SSA_NAME_DEF_STMT (vuse);\n \n   /* If the store is in the same bb as the phi,\n      see if skipping one store is possible.  */\n","prefixes":["GCC17-PATCH","6/6"]}