<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Oct 22, 2018, at 11:29 PM, Yuchao (Michael) via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="WordSection1" style="page: WordSection1; caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;"><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);" class="">As far as I know, dead register is not only means none would read  it , it may means register is clobbered.</span></div></div></div></blockquote><div>Yes, any definition "clobbers" a register.</div><br class=""><blockquote type="cite" class=""><div class=""><div class="WordSection1" style="page: WordSection1; caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;"><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);" class=""><o:p class=""> </o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);" class=""><a href="http://lists.llvm.org/pipermail/llvm-dev/2018-February/120994.html" style="color: purple; text-decoration: underline;" class="">http://lists.llvm.org/pipermail/llvm-dev/2018-February/120994.html</a><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);" class=""><o:p class=""> </o:p></span></div><div style="border-style: none none none solid; border-left-width: 1.5pt; border-left-color: blue; padding: 0cm 0cm 0cm 4pt;" class=""><div class=""><div style="border-style: solid none none; border-top-width: 1pt; border-top-color: rgb(225, 225, 225); padding: 3pt 0cm 0cm;" class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><b class=""><span lang="EN-US" style="font-size: 11pt; font-family: Calibri, sans-serif;" class="">From:</span></b><span lang="EN-US" style="font-size: 11pt; font-family: Calibri, sans-serif;" class=""><span class="Apple-converted-space"> </span>Matthias Braun [<a href="mailto:matze@braunis.de" class="">mailto:matze@braunis.de</a>]<span class="Apple-converted-space"> </span><br class=""><b class="">Sent:</b><span class="Apple-converted-space"> </span>Tuesday, October 23, 2018 2:04 AM<br class=""><b class="">To:</b><span class="Apple-converted-space"> </span>Yuchao (Michael) <<a href="mailto:michael.yuchao@huawei.com" class="">michael.yuchao@huawei.com</a>><br class=""><b class="">Cc:</b><span class="Apple-converted-space"> </span><a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a>; sunqiang (I) <<a href="mailto:sunqiang13@huawei.com" class="">sunqiang13@huawei.com</a>><br class=""><b class="">Subject:</b><span class="Apple-converted-space"> </span>Re: [llvm-dev] Question about MachineCSE optimization<o:p class=""></o:p></span></div></div></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""><o:p class=""> </o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">Yes<o:p class=""></o:p></span></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">OP_X ..., implicit-def dead %X<o:p class=""></o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">... potentially more defs/uses of %X<o:p class=""></o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">OP_X ..., implicit-def dead %X<o:p class=""></o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""><o:p class=""> </o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">is good to merge. Also note that:<o:p class=""></o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""><o:p class=""> </o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">%X = DEF<o:p class=""></o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">OP_X ..., implicit-def dead %X<o:p class=""></o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">use %X<o:p class=""></o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""><o:p class=""> </o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">is not valid! (The def overrides the register value but the "dead" flag promises noone will read it, even though in this case another use comes below).<o:p class=""></o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""><o:p class=""> </o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">- Matthias<o:p class=""></o:p></span></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""><br class=""><br class=""><o:p class=""></o:p></span></div><blockquote style="margin-top: 5pt; margin-bottom: 5pt;" class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">On Oct 22, 2018, at 4:59 AM, Yuchao (Michael) <<a href="mailto:michael.yuchao@huawei.com" style="color: purple; text-decoration: underline;" class="">michael.yuchao@huawei.com</a>> wrote:<o:p class=""></o:p></span></div></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""><o:p class=""> </o:p></span></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);" class="">Hi<span class="apple-converted-space"> </span></span><span lang="EN-US" style="font-size: 11pt; font-family: Calibri, sans-serif;" class="">mbraun</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" style="font-size: 11pt; font-family: Calibri, sans-serif;" class=""> </span><span lang="EN-US" class=""><o:p class=""></o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" style="font-size: 11pt; font-family: Calibri, sans-serif;" class="">Thanks for your information.</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" style="font-size: 11pt; font-family: Calibri, sans-serif;" class=""> </span><span lang="EN-US" class=""><o:p class=""></o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" style="font-size: 11pt; font-family: Calibri, sans-serif;" class="">What about following situation:</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" style="font-size: 11pt; font-family: Calibri, sans-serif;" class="">3)</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" style="font-size: 11pt; font-family: Calibri, sans-serif;" class="">OP_X …, implicit-def dead %X </span><span lang="EN-US" class=""><o:p class=""></o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" style="font-size: 11pt; font-family: Calibri, sans-serif;" class="">with</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" style="font-size: 11pt; font-family: Calibri, sans-serif;" class="">OP_X …, implicit-def dead %X</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);" class=""> </span><span lang="EN-US" class=""><o:p class=""></o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" style="font-size: 11pt; font-family: Calibri, sans-serif;" class="">Between two instructions, there may be another instruction(not OP_X) which also def %X,</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" style="font-size: 11pt; font-family: Calibri, sans-serif;" class="">Is it  correct to do CSE in this situation?</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" style="font-size: 11pt; font-family: Calibri, sans-serif;" class=""> </span><span lang="EN-US" class=""><o:p class=""></o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" style="font-size: 11pt; font-family: Calibri, sans-serif;" class="">Best wishes</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" style="font-size: 11pt; font-family: Calibri, sans-serif;" class="">Michael</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);" class=""> </span><span lang="EN-US" class=""><o:p class=""></o:p></span></div></div><div style="border-style: none none none solid; border-left-width: 1.5pt; border-left-color: blue; padding: 0cm 0cm 0cm 4pt;" class=""><div class=""><div style="border-style: solid none none; border-top-width: 1pt; border-top-color: rgb(225, 225, 225); padding: 3pt 0cm 0cm;" class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><b class=""><span lang="EN-US" style="font-size: 11pt; font-family: Calibri, sans-serif;" class="">From:</span></b><span class="apple-converted-space"><span lang="EN-US" style="font-size: 11pt; font-family: Calibri, sans-serif;" class=""> </span></span><span lang="EN-US" style="font-size: 11pt; font-family: Calibri, sans-serif;" class=""><a href="mailto:mbraun@apple.com" style="color: purple; text-decoration: underline;" class="">mbraun@apple.com</a><span class="Apple-converted-space"> </span>[<a href="mailto:mbraun@apple.com" style="color: purple; text-decoration: underline;" class="">mailto:mbraun@apple.com</a>]<span class="apple-converted-space"> </span><br class=""><b class="">Sent:</b><span class="apple-converted-space"> </span>Monday, October 22, 2018 5:51 AM<br class=""><b class="">To:</b><span class="apple-converted-space"> </span>Matthias Braun <<a href="mailto:mbraun@apple.com" style="color: purple; text-decoration: underline;" class="">mbraun@apple.com</a>><br class=""><b class="">Cc:</b><span class="apple-converted-space"> </span>Yuchao (Michael) <<a href="mailto:michael.yuchao@huawei.com" style="color: purple; text-decoration: underline;" class="">michael.yuchao@huawei.com</a>>;<span class="Apple-converted-space"> </span><a href="mailto:llvm-dev@lists.llvm.org" style="color: purple; text-decoration: underline;" class="">llvm-dev@lists.llvm.org</a>; sunqiang (I) <<a href="mailto:sunqiang13@huawei.com" style="color: purple; text-decoration: underline;" class="">sunqiang13@huawei.com</a>><br class=""><b class="">Subject:</b><span class="apple-converted-space"> </span>Re: [llvm-dev] Question about MachineCSE optimization</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div></div></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""> <o:p class=""></o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""> <o:p class=""></o:p></span></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""><br class=""><br class=""><br class=""><o:p class=""></o:p></span></div></div><blockquote style="margin-top: 5pt; margin-bottom: 5pt;" class=""><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">On Oct 21, 2018, at 2:48 PM, mbraun via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">llvm-dev@lists.llvm.org</span></a>> wrote:<o:p class=""></o:p></span></div></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""> <o:p class=""></o:p></span></div></div><div class=""><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">As far as I understand it (though I didn</span>’<span lang="EN-US" class="">t write the code so I may be missing something) this is about making sure liveness flags (kill, dead) are updated correctly when merging instruction. The situations to consider are probably:<o:p class=""></o:p></span></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""> <o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">1)<o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">OP_X<span class="Apple-converted-space"> </span></span>…<span lang="EN-US" class="">, implicit-def %X<o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">with<o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">OP_X<span class="Apple-converted-space"> </span></span>…<span lang="EN-US" class="">, implicit-def dead %X<o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""> <o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">The merged instruction probably should not have a dead flag set. The 2nd if appears to be about this situation:<o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""> <o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""> <o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">2)<o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">OP_X<span class="Apple-converted-space"> </span></span>…<span lang="EN-US" class="">, implicit-def dead %X<o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">Use killed %X<o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class="">…<span lang="EN-US" class=""><o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">OP_X<span class="Apple-converted-space"> </span></span>…<span lang="EN-US" class="">, implicit-def %X    ; this gets merged with the previous OP_X<o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">Use %X<o:p class=""></o:p></span></div></div></div></div></div></blockquote><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">This example should of course read:<o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""> <o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">OP_X<span class="Apple-converted-space"> </span></span>…<span lang="EN-US" class="">, implicit-def %X<o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">Use killed %X<o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class="">…<span lang="EN-US" class=""><o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">OP_X<span class="Apple-converted-space"> </span></span>…<span lang="EN-US" class="">, implicit-def %X    ; this gets merged with the previous OP_X<o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">Use %X<o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""> <o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">Once we merge the 2nd OP_X with the first one, we have to drop the `killed` flags on all users of %X between the first OP_X and the position where we had the 2nd OP_X before it was merged.<o:p class=""></o:p></span></div></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""><br class=""><br class=""><br class=""><o:p class=""></o:p></span></div></div><blockquote style="margin-top: 5pt; margin-bottom: 5pt;" class=""><div class=""><div class=""><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""> <o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">Once we merge the 2nd OP_X with the first one, we have to drop the `killed` flags on the %X users.<o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""> <o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""> <o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""> <o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">Though admittedly I am at a loss right now why this is only performed for implicit operands and not for all operands</span>…<span lang="EN-US" class=""><o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""> <o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">- Matthias<o:p class=""></o:p></span></div></div></div><div class=""><div class=""><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""><br class=""><br class=""><br class=""><o:p class=""></o:p></span></div></div><blockquote style="margin-top: 5pt; margin-bottom: 5pt;" class=""><div class=""><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">On Oct 20, 2018, at 1:38 AM, Yuchao (Michael) via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">llvm-dev@lists.llvm.org</span></a>> wrote:<o:p class=""></o:p></span></div></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""> <o:p class=""></o:p></span></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class="">Hi<span class="apple-converted-space"> </span></span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class=""> </span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class="">I am trying to fix a bug in MachineCSE and have one question about following code:</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class=""> </span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class="">*********************************************</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class="">// Go through implicit defs of CSMI and MI, if a def is not dead at MI,</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class="">// we should make sure it is not dead at CSMI.</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class="">if (MO.isImplicit() && !MO.isDead() && CSMI->getOperand(i).isDead())</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class="">  ImplicitDefsToUpdate.push_back(i);</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class=""> </span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class="">// Keep track of implicit defs of CSMI and MI, to clear possibly</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class="">// made-redundant kill flags.</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class="">if (MO.isImplicit() && !MO.isDead() && OldReg == NewReg)</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class="">  ImplicitDefs.push_back(OldReg);</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class=""> </span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class="">if (OldReg == NewReg) {</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class="">  --NumDefs;</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class="">  continue;</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class="">}</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class="">**********************************************</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class=""> </span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class="">From Above source code, it seems that CSE does not handle instruction which</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class="">have one operand that is ‘implicit+isDead+isDef’.</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class=""> </span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class="">Base on my understanding, implicit dead register is mean clobbered, so it is not safe to</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class="">do CSE. Is this right?</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class=""> </span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class="">Best wishes</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class="">Michael</span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体; text-align: justify;" class=""><span lang="EN-US" style="font-size: 10.5pt; font-family: Calibri, sans-serif;" class=""> </span><span lang="EN-US" class=""><o:p class=""></o:p></span></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" style="font-size: 9pt; font-family: Helvetica, sans-serif;" class="">_______________________________________________<br class="">LLVM Developers mailing list<br class=""></span><span lang="EN-US" class=""><a href="mailto:llvm-dev@lists.llvm.org" style="color: purple; text-decoration: underline;" class=""><span style="font-size: 9pt; font-family: Helvetica, sans-serif; color: rgb(149, 79, 114);" class="">llvm-dev@lists.llvm.org</span></a></span><span lang="EN-US" style="font-size: 9pt; font-family: Helvetica, sans-serif;" class=""><br class=""></span><span lang="EN-US" class=""><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" style="color: purple; text-decoration: underline;" class=""><span style="font-size: 9pt; font-family: Helvetica, sans-serif; color: rgb(149, 79, 114);" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</span></a><o:p class=""></o:p></span></div></div></div></blockquote></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""> <o:p class=""></o:p></span></div></div></div></div></div><div class=""><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class="">_______________________________________________<br class="">LLVM Developers mailing list<br class=""><a href="mailto:llvm-dev@lists.llvm.org" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">llvm-dev@lists.llvm.org</span></a><br class=""><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</span></a><o:p class=""></o:p></span></div></div></div></blockquote></div></div></div></blockquote></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 宋体;" class=""><span lang="EN-US" class=""><o:p class=""> </o:p></span></div></div></div></div><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">_______________________________________________</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">LLVM Developers mailing list</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><a href="mailto:llvm-dev@lists.llvm.org" style="color: purple; text-decoration: underline; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">llvm-dev@lists.llvm.org</a><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" style="color: purple; text-decoration: underline; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a></div></blockquote></div><br class=""></body></html>