{"id":2233382,"url":"http://patchwork.ozlabs.org/api/1.1/patches/2233382/?format=json","web_url":"http://patchwork.ozlabs.org/project/gcc/patch/20260506041649.1357118-1-naveen.siddegowda@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":"<20260506041649.1357118-1-naveen.siddegowda@oss.qualcomm.com>","date":"2026-05-06T04:16:49","name":"tree-optimization: fold memset with length in [0, 1] to conditional store [PR102202]","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"eb42a8e62ce96dc943e404ca7987ff1967e10817","submitter":{"id":93028,"url":"http://patchwork.ozlabs.org/api/1.1/people/93028/?format=json","name":"Naveen","email":"naveen.siddegowda@oss.qualcomm.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/gcc/patch/20260506041649.1357118-1-naveen.siddegowda@oss.qualcomm.com/mbox/","series":[{"id":502957,"url":"http://patchwork.ozlabs.org/api/1.1/series/502957/?format=json","web_url":"http://patchwork.ozlabs.org/project/gcc/list/?series=502957","date":"2026-05-06T04:16:49","name":"tree-optimization: fold memset with length in [0, 1] to conditional store [PR102202]","version":1,"mbox":"http://patchwork.ozlabs.org/series/502957/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2233382/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2233382/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=fail reason=\"signature verification failed\" (2048-bit key;\n unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256\n header.s=qcppdkim1 header.b=AXqibMJi;\n\tdkim=fail reason=\"signature verification failed\" (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=ku99eSl+;\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=fail reason=\"signature verification failed\" (2048-bit key,\n unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256\n header.s=qcppdkim1 header.b=AXqibMJi;\n\tdkim=fail reason=\"signature verification failed\" (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=ku99eSl+","sourceware.org; dmarc=none (p=none dis=none)\n header.from=oss.qualcomm.com","sourceware.org;\n spf=pass smtp.mailfrom=oss.qualcomm.com","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 4g9Wts0qmTz1y04\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 06 May 2026 20:33:25 +1000 (AEST)","from vm01.sourceware.org (localhost [IPv6:::1])\n\tby sourceware.org (Postfix) with ESMTP id CB6074BA9008\n\tfor <incoming@patchwork.ozlabs.org>; Wed,  6 May 2026 10:33:22 +0000 (GMT)","from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com\n [205.220.180.131])\n by sourceware.org (Postfix) with ESMTPS id D4E7B4BA7985\n for <gcc-patches@gcc.gnu.org>; Wed,  6 May 2026 04:16:55 +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 645NrP3L2859493\n for <gcc-patches@gcc.gnu.org>; Wed, 6 May 2026 04:16:55 GMT","from mail-dy1-f200.google.com (mail-dy1-f200.google.com\n [74.125.82.200])\n by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4dye0am0sb-1\n (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT)\n for <gcc-patches@gcc.gnu.org>; Wed, 06 May 2026 04:16:54 +0000 (GMT)","by mail-dy1-f200.google.com with SMTP id\n 5a478bee46e88-2ba8013a9e3so9393575eec.0\n for <gcc-patches@gcc.gnu.org>; Tue, 05 May 2026 21:16:54 -0700 (PDT)","from hu-navehs-lv.qualcomm.com (Global_NAT1.qualcomm.com.\n [129.46.96.20]) by smtp.gmail.com with ESMTPSA id\n 5a478bee46e88-2f57028b991sm1559425eec.25.2026.05.05.21.16.51\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Tue, 05 May 2026 21:16:52 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org CB6074BA9008","OpenDKIM Filter v2.11.0 sourceware.org D4E7B4BA7985"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org D4E7B4BA7985","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org D4E7B4BA7985","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1778041016; cv=none;\n b=jARzR7hatZE/b1P3mx831BLYNmOjyCBQJqWOx0hfr42Y0uQfQJhF2DnvT/K44XGJimkiIN6XMd0MVWNRKxstoAfuRvQY0OGIWGkkE7mwFQS9WwSgoZch/EpxPDirosD7AFObkjOggQLFxWzpwhgaNlHLja4oeJQfKOJxSXgGo2M=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1778041016; c=relaxed/simple;\n bh=nzZe8XaUhd8llU8aBr70lFh5J4cp916kcmzSocolwf4=;\n h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-Id:\n MIME-Version;\n b=PEDuzjQn3MxbXnJt5uKNWatgMSIndwmKnGedDmvtyf2UaSHA+jNe8ZbMySzKD3SOFmk2wMEvG19d+6Wn2x9DkAF2Mg6xleQNkCsiaQV+P0YFfcb6IjMNXmlEjwBQc7q/5QgH4CGT1oqqjFV0AXIF+hSmJn/mYRRRD1T/EhvKKEQ=","ARC-Authentication-Results":"i=1; sourceware.org;\n dkim=pass (2048-bit key, unprotected)\n header.d=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256\n header.s=qcppdkim1 header.b=AXqibMJi;\n dkim=pass (2048-bit key, unprotected) header.d=oss.qualcomm.com\n header.i=@oss.qualcomm.com header.a=rsa-sha256 header.s=google\n header.b=ku99eSl+","DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=\n cc:content-transfer-encoding:date:from:message-id:mime-version\n :subject:to; s=qcppdkim1; bh=J2AyP92yk6V/AkTTr7xW/lgLgjoLrUyJFwz\n pp9RhfJI=; b=AXqibMJi2h3Nsi5SNFIpj254jfu+uK+q7ec9jYs6WQ3RWx09y4L\n 7782bl/3lBUbLr/5a4gl6t61EuXvpDv45+329HDtRacp+TiMop52mcuvg7RA+ZY2\n 8YBEodB6gFf3l9mCMmHFLeCDmqprzWBA5lmm4dbXjmR5ggjh9Fy6CATdkK22zfh6\n NekI/XdyfOV+v2yXWRufG73HaCKQ5V4qO46lM0yYjVOG8KjV3+aueWyC5xk1GmlS\n jdLaXU1Lt3uxNWJdVhaiMEPQriXZQ/aF822HDmC6JEVJv565AX9MrjChg2sUaVKh\n AL768sIkR+7dtVMAXhKVPbSqbP7qDLoy/Fg==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=oss.qualcomm.com; s=google; t=1778041013; x=1778645813; darn=gcc.gnu.org;\n h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n :to:from:from:to:cc:subject:date:message-id:reply-to;\n bh=J2AyP92yk6V/AkTTr7xW/lgLgjoLrUyJFwzpp9RhfJI=;\n b=ku99eSl+vkWHO/VkWeQVBQQ+ZPzyqNTuVGdymFekVuJfGXkLIN6xapsLnmnn/zaW7b\n 45w/pwuwOwDNSJjXkq9Bc9W//nbcwWVMWAeNxIVt7+bs01s8WtYr+WVqO1UI34LISevm\n 8begsgHysR2kp73gaFMdb0jwwACBx+iVynGcy0scVezvhT6jJFyrSfNsN6QT2rFkJtnw\n MjkdJfFe+PeTE5bHzq8OE1SJKmrjbUOPeEPAl/PBjTv82lfv7PliNGEJafmfAoNhCnhC\n 3C441Pj9IJtdMIPYV2K+taCVkcajn5eCtWWAEp85qbtOYkkxTLwlPYafdlOepeUPjSK5\n CDqA=="],"X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1778041013; x=1778645813;\n h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n :message-id:reply-to;\n bh=J2AyP92yk6V/AkTTr7xW/lgLgjoLrUyJFwzpp9RhfJI=;\n b=LH4N4RvBiaevS1/MTn8fG0+6Xv4AfZFRxRwQ4qR/42nkiIqzASwaapFoCECusnXmzz\n ais0Lh/riOAre+gdLZwISvmj7FncCi0pBnnEnAJCSVSPVrM5s9T8tHHWu2Bm0+lQDjz/\n T4eZJDauZP4NopZM1V0moe9zUjgst6FulU8BYgWi3AjZXOGoLEwZJ0wssQ2YsUEwNTi7\n 8IStIuA4m5be0ddPd0C7c99hgMxXVfVqmlC8bLf2lFX2d1DniLUDAAPUTAZj/y19CcaW\n euIyH8OULgMsOfCLyraZcrH5aYoPsiiIpWQmGviSwhyDmxjzkk79IwrwPJ/PCcEhpp3Q\n FsLA==","X-Gm-Message-State":"AOJu0Yw2JZtLoIXzEaQzy7Tzvy5gHD4Bou7Kc6FKJSilN7rpOeEEo6pq\n P1+sGr5MDEr/Vohtznr4oOxPcLEYu4KpjpC8X8dt7FMFVYiPu9ucGzf3hFCkyeOUekN0JN+PFCs\n PyRHn8S2dSSsOBrOXvZuk8nozbkvgCnsRXxvkGnauOMZ77J5hPIgC8z+JLZsgDPOhX30Uy2g=","X-Gm-Gg":"AeBDievEbryrEc+JvMGlALM0H+9cVAaczJjfmP+OtgaE/+v+dn06SH8xY7JTCSwYBFk\n a5qJBi3CT2THyBztoEp0FMoizhf84jC1+E5OJA7ELug328bcntzEt2tt/1TuIyivlM9Y1xPMKGu\n fL7SCqcXVvkCkVF9Dou1eXeZiQgpcZwu7yJRvtB2CRotxrYS6JosiloESDcIHtkVGzsUMnZaCOr\n 7IKNQWF3ZfoyMDa7R4EM5qD5+nlIJk5eS9HMTGOgEOKvsWJSqJ1lT/64Ze2UiwmQIMT1+juM3Fv\n prgaiW9huK7DzVR1iMWrX5TAkx73UbeMIpEqs4BdJxOyw8s9g5RQfy+exnCff+3oozlmMAmpH2r\n up3ijn+soOPWVcdRqNaHU25IR0WtBYdiN94HKXDII/siVlcUXDvaaVPgDIRcb+9gGnnomhsoO3D\n QnTVkOUyuiMrt21+Q=","X-Received":["by 2002:a05:7300:b58b:b0:2d4:532e:7e39 with SMTP id\n 5a478bee46e88-2f54b89834amr1172164eec.6.1778041013243;\n Tue, 05 May 2026 21:16:53 -0700 (PDT)","by 2002:a05:7300:b58b:b0:2d4:532e:7e39 with SMTP id\n 5a478bee46e88-2f54b89834amr1172152eec.6.1778041012592;\n Tue, 05 May 2026 21:16:52 -0700 (PDT)"],"From":"Naveen <naveen.siddegowda@oss.qualcomm.com>","To":"gcc-patches@gcc.gnu.org","Cc":"Naveen <naveen.siddegowda@oss.qualcomm.com>","Subject":"[PATCH] tree-optimization: fold memset with length in [0,\n 1] to conditional store [PR102202]","Date":"Tue,  5 May 2026 21:16:49 -0700","Message-Id":"<20260506041649.1357118-1-naveen.siddegowda@oss.qualcomm.com>","X-Mailer":"git-send-email 2.34.1","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","X-Proofpoint-Spam-Details-Enc":"AW1haW4tMjYwNTA2MDAzOCBTYWx0ZWRfX/JIg8WKSTj09\n 8O0BuxRhBNny4ghL3YOKDROQe8WeVONaddf1mpxQYrQplmgO2bBcE4oQtyuzCye0f5zTFbLAvtx\n aIsysvWevb2YwMev1y4qeKX/R8MiLtjpfKMcpEEmSVa78f/mZjc/G6cNNuqcpmhSPjPEUCJs2Fn\n TDt+UFZPEeXFPS75p04U62WmeIza1WfgqbEHcaEq/EC3WP8RUxA7OO0fH8xJFkPhLIwN/KuTqlt\n Qrfi/He4PiTJu4Wj1LWwwmGRQ5XT40OtkMXPaWC5mFJ3m2g2MLzQRwQnlrQFIoOKtGg4DzZlRrQ\n JOk+A8956JYO9XspwlzuPTqG5tUuxwhtykrDBH/PoJe4dUvuBaXhfOpVzn/uNye9/YoxPnwfElZ\n m31XtFov9KsRkREjoPLPt9fahSpoXBN6N19p+7sWS/5MqMrTOxdspiJkGT0Wfni8q/8xLNA3RL/\n Mv9PGsiB1hMdnTZO//Q==","X-Authority-Analysis":"v=2.4 cv=Wtkb99fv c=1 sm=1 tr=0 ts=69fac0b6 cx=c_pps\n a=PfFC4Oe2JQzmKTvty2cRDw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17\n a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22\n a=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=EUspDBNiAAAA:8\n a=Tk19AKb_OUpIybo-AvEA:9 a=3ZKOabzyN94A:10 a=6Ab_bkdmUrQuMsNx7PHu:22","X-Proofpoint-GUID":"bcNf3L6j_Exye0ow1zzG2dXAShGlWXiD","X-Proofpoint-ORIG-GUID":"bcNf3L6j_Exye0ow1zzG2dXAShGlWXiD","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-05-05_02,2026-04-30_02,2025-10-01_01","X-Proofpoint-Spam-Details":"rule=outbound_notspam policy=outbound score=0\n suspectscore=0 priorityscore=1501 lowpriorityscore=0 phishscore=0\n malwarescore=0 spamscore=0 bulkscore=0 adultscore=0 clxscore=1015\n impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc=\n route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604200000\n definitions=main-2605060038","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":"PR tree-optimization/102202\n\ngcc/ChangeLog:\n\n\tPR tree-optimization/102202\n\t* tree-call-cdce.cc: Include \"tree-ssanames.h\", \"gimple-fold.h\"\n\tand \"gimplify-me.h\".\n\t(memset_len_zero_or_one_p): New function.\n\t(can_shrink_wrap_memset_p): New function.\n\t(gen_memset_conditions): New function.\n\t(replace_memset_call_with_store): New function.\n\t(shrink_wrap_one_memset_call): New function.\n\t(shrink_wrap_conditional_dead_built_in_calls): Dispatch to\n\tshrink_wrap_one_memset_call for memset calls eligible for the [0, 1]\n\tlength transform, ahead of the generic LHS and range-test paths.\n\t(pass_call_cdce::execute): Collect memset calls satisfying\n\tcan_shrink_wrap_memset_p as shrink-wrap candidates.\n\ngcc/testsuite/ChangeLog:\n\n\t* gcc.dg/pr102202.c: New test.\n\nSigned-off-by: Naveen <naveen.siddegowda@oss.qualcomm.com>\n---\n gcc/testsuite/gcc.dg/pr102202.c |  31 +++++++\n gcc/tree-call-cdce.cc           | 138 +++++++++++++++++++++++++++++++-\n 2 files changed, 165 insertions(+), 4 deletions(-)\n create mode 100644 gcc/testsuite/gcc.dg/pr102202.c","diff":"diff --git a/gcc/testsuite/gcc.dg/pr102202.c b/gcc/testsuite/gcc.dg/pr102202.c\nnew file mode 100644\nindex 00000000000..6d3306370c0\n--- /dev/null\n+++ b/gcc/testsuite/gcc.dg/pr102202.c\n@@ -0,0 +1,31 @@\n+/* PR tree-optimization/102202 */\n+/* { dg-do compile } */\n+/* { dg-options \"-O2 -fdump-tree-optimized\" } */\n+\n+void\n+g1 (int a, char *d)\n+{\n+  if (a < 0 || a > 1)\n+    __builtin_unreachable ();\n+  __builtin_memset (d, 0, a);\n+}\n+\n+char *\n+g2 (unsigned a, char *d)\n+{\n+  return __builtin_memset (d, 1, a & 1);\n+}\n+\n+void\n+g3 (int a, int c, char *d)\n+{\n+  if (a < 0 || a > 1)\n+    __builtin_unreachable ();\n+  __builtin_memset (d, c, a);\n+}\n+\n+/* { dg-final { scan-tree-dump-times {MEM[^;\\n]*= 0;} 1 \"optimized\" } } */\n+/* { dg-final { scan-tree-dump-times {MEM[^;\\n]*= 1;} 1 \"optimized\" } } */\n+/* { dg-final { scan-tree-dump-times {return d_[0-9]} 1 \"optimized\" } } */\n+/* { dg-final { scan-tree-dump-times {MEM[^;\\n]*=.*c_[0-9]+\\(D\\)} 1 \"optimized\" } } */\n+/* { dg-final { scan-tree-dump-not \"MEMSET\" \"optimized\" } } */\ndiff --git a/gcc/tree-call-cdce.cc b/gcc/tree-call-cdce.cc\nindex 2be891a7222..6e4ebd00765 100644\n--- a/gcc/tree-call-cdce.cc\n+++ b/gcc/tree-call-cdce.cc\n@@ -37,6 +37,9 @@ along with GCC; see the file COPYING3.  If not see\n #include \"internal-fn.h\"\n #include \"tree-dfa.h\"\n #include \"tree-eh.h\"\n+#include \"tree-ssanames.h\"\n+#include \"gimple-fold.h\"\n+#include \"gimplify-me.h\"\n \f\n \n /* This pass serves two closely-related purposes:\n@@ -1255,9 +1258,130 @@ use_internal_fn (gcall *call)\n \t\t\t\t\t    is_arg_conds ? new_call : NULL);\n }\n \n+/* Return true if LEN is a constant zero or one or an SSA_NAME known to have\n+   a boolean range.  */\n+\n+static bool\n+memset_len_zero_or_one_p (tree len, gimple *stmt)\n+{\n+  if (integer_zerop (len) || integer_onep (len))\n+    return true;\n+\n+  if (TREE_CODE (len) != SSA_NAME || !INTEGRAL_TYPE_P (TREE_TYPE (len)))\n+    return false;\n+  return ssa_name_has_boolean_range (len, stmt);\n+}\n+\n+/* Return true if CALL is a memset that may be shrink-wrapped based on LEN\n+   being known to be zero or one.  */\n+\n+static bool\n+can_shrink_wrap_memset_p (gcall *call)\n+{\n+  tree fndecl = gimple_call_fndecl (call);\n+\n+  if (!fndecl\n+      || !fndecl_built_in_p (fndecl, BUILT_IN_NORMAL)\n+      || DECL_FUNCTION_CODE (fndecl) != BUILT_IN_MEMSET)\n+    return false;\n+\n+  /* The replacement store needs to preserve the original memory VDEF.  */\n+  if (!gimple_vdef (call))\n+    return false;\n+\n+  return memset_len_zero_or_one_p (gimple_call_arg (call, 2), call);\n+}\n+\n+/* Generate the condition vector used to guard a memset call whose length is\n+   known to be in [0, 1].  */\n+\n+static void\n+gen_memset_conditions (gcall *call, vec<gimple *> &conds, unsigned *nconds)\n+{\n+  tree len = gimple_call_arg (call, 2);\n+  tree zero = build_zero_cst (TREE_TYPE (len));\n+\n+  gcc_assert (nconds);\n+  *nconds = 0;\n+\n+  conds.quick_push (gimple_build_cond (EQ_EXPR, len, zero,\n+\t\t\t\t       NULL_TREE, NULL_TREE));\n+  *nconds = 1;\n+}\n+\n+/* Replace CALL known to be a length-one memset with a single-byte store.\n+   The destination is converted to unsigned char * and the fill value to the\n+   destination byte type using gimple_convert.  */\n+\n+static void\n+replace_memset_call_with_store (gcall *call)\n+{\n+  tree dest = gimple_call_arg (call, 0);\n+  tree c = gimple_call_arg (call, 1);\n+  location_t loc = gimple_location (call);\n+\n+  tree byte_type = unsigned_char_type_node;\n+  tree byte_ptr_type = build_pointer_type (byte_type);\n+\n+  gimple_stmt_iterator gsi = gsi_for_stmt (call);\n+  dest = gimple_convert (&gsi, true, GSI_SAME_STMT, loc, byte_ptr_type, dest);\n+  dest = force_gimple_operand_gsi_1 (&gsi, dest, is_gimple_mem_ref_addr,\n+\t\t\t\t     NULL_TREE, true, GSI_SAME_STMT);\n+\n+  tree mem = build2 (MEM_REF, byte_type, dest,\n+\t\t     build_int_cst (ptr_type_node, 0));\n+\n+  /* Memset writes the low byte of the fill value to each destination type.  */\n+  tree rhs = gimple_convert (&gsi, true, GSI_SAME_STMT, loc, byte_type, c);\n+\n+  gassign *store = gimple_build_assign (mem, rhs);\n+  gimple_move_vops (store, call);\n+  gimple_set_location (store, loc);\n+\n+  copy_warning (store, call);\n+  suppress_warning (store, OPT_Wstringop_overflow_);\n+\n+  gsi = gsi_for_stmt (call);\n+  gsi_replace (&gsi, store, false);\n+}\n+\n+/* Shrink wrap a memset call whose length is known to be in [0, 1].\n+   If the call has an LHS, preserve the builtin return value by assigning the\n+   destination pointer to the LHS before the call transfer.  */\n+\n+static void\n+shrink_wrap_one_memset_call (gcall *call)\n+{\n+  tree lhs = gimple_call_lhs (call);\n+\n+  if (lhs)\n+    {\n+      tree dest = gimple_call_arg (call, 0);\n+      location_t loc = gimple_location (call);\n+      gimple_stmt_iterator gsi = gsi_for_stmt (call);\n+\n+      dest = gimple_convert (&gsi, true, GSI_SAME_STMT, loc,\n+\t\t\t     TREE_TYPE (lhs), dest);\n+      gassign *stmt = gimple_build_assign (lhs, dest);\n+      gimple_set_location (stmt, loc);\n+\n+      gsi_insert_before (&gsi, stmt, GSI_SAME_STMT);\n+\n+      gimple_call_set_lhs (call, NULL_TREE);\n+      SSA_NAME_DEF_STMT (lhs) = stmt;\n+    }\n+\n+  unsigned nconds = 0;\n+  auto_vec<gimple *, 1> conds;\n+  gen_memset_conditions (call, conds, &nconds);\n+  gcc_assert (nconds != 0);\n+\n+  shrink_wrap_one_built_in_call_with_conds (call, conds, nconds);\n+  replace_memset_call_with_store (call);\n+}\n+\n /* The top level function for conditional dead code shrink\n    wrapping transformation.  */\n-\n static void\n shrink_wrap_conditional_dead_built_in_calls (const vec<gcall *> &calls)\n {\n@@ -1267,8 +1391,13 @@ shrink_wrap_conditional_dead_built_in_calls (const vec<gcall *> &calls)\n   for (; i < n ; i++)\n     {\n       gcall *bi_call = calls[i];\n-      if (gimple_call_lhs (bi_call))\n+\n+      /* Use the memset specific transform for the [0, 1] length case.  */\n+      if (can_shrink_wrap_memset_p (bi_call))\n+\tshrink_wrap_one_memset_call (bi_call);\n+      else if (gimple_call_lhs (bi_call))\n \tuse_internal_fn (bi_call);\n+      /* Other eligible calls are shrink wrapped by the generic path.  */\n       else\n \tshrink_wrap_one_built_in_call (bi_call);\n     }\n@@ -1328,9 +1457,10 @@ pass_call_cdce::execute (function *fun)\n \t  gcall *stmt = dyn_cast <gcall *> (gsi_stmt (i));\n           if (stmt\n \t      && gimple_call_builtin_p (stmt, BUILT_IN_NORMAL)\n-\t      && (gimple_call_lhs (stmt)\n+\t      && (can_shrink_wrap_memset_p (stmt)\n+\t      || (gimple_call_lhs (stmt)\n \t\t  ? can_use_internal_fn (stmt)\n-\t\t  : can_test_argument_range (stmt))\n+\t\t  : can_test_argument_range (stmt)))\n \t      && can_guard_call_p (stmt))\n             {\n               if (dump_file && (dump_flags & TDF_DETAILS))\n","prefixes":[]}