<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 Feb 5, 2018, at 11:27 AM, <a href="mailto:gberry@codeaurora.org" class="">gberry@codeaurora.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: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div><div class=""><div style="border-style: solid none none; border-top-width: 1pt; border-top-color: rgb(225, 225, 225); padding: 3pt 0in 0in;" class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><b class="">From:</b><span class="Apple-converted-space"> </span><a href="mailto:qcolombet@apple.com" style="color: purple; text-decoration: underline;" class="">qcolombet@apple.com</a><span class="Apple-converted-space"> </span>[<a href="mailto:qcolombet@apple.com" style="color: purple; text-decoration: underline;" class="">mailto:qcolombet@apple.com</a>]<span class="Apple-converted-space"> </span><br class=""><b class="">Sent:</b><span class="Apple-converted-space"> </span>Friday, February 2, 2018 8:18 PM<br class=""><br class=""><o:p class=""></o:p></div></div></div><div class=""><blockquote style="margin-top: 5pt; margin-bottom: 5pt;" class="" type="cite"><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">On Feb 2, 2018, at 3:53 PM, Nemanja Ivanovic via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" style="color: purple; text-decoration: underline;" class="">llvm-commits@lists.llvm.org</a>> wrote:<o:p class=""></o:p></div></div><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div><div class=""><div class=""><div class=""><div class=""><div class=""><div class=""><div class=""><div class=""><div class=""><div class=""><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Sorry, but it seems to me that we are working around the problem with the hasExtraRegAllocReq flag and this workaround is introducing new problems that then need to be solved.<o:p class=""></o:p></div></div><p class="MsoNormal" style="margin: 0in 0in 12pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;">Going back to the original problem that Escha reported, it seems to be that the back end ends up in the following state which arguably is probably not a reasonable state to be in (if register renaming is to be allowed):<o:p class=""></o:p></p></div><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">- There are constraints added to the virtual registers that restrict which register class the assigned physical register must come from<o:p class=""></o:p></div></div><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">- The register allocator respects those constraints and selects a register from the correct class<o:p class=""></o:p></div></div><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">- The selected physical register is marked as renamable<o:p class=""></o:p></div></div><p class="MsoNormal" style="margin: 0in 0in 12pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;">- Calling MachineInstr::getRegClassConstraint() on the machine instruction returns a register class that does not take into account the additional constraints<o:p class=""></o:p></p></div><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Ultimately, anything that does register renaming with the back end in that state can potentially break the code since it doesn't know what actual class the register rename is allowed to come from.<o:p class=""></o:p></div></div><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div></div><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Wouldn't this mean that a target that can be in this state has at least these two reasonable options:<o:p class=""></o:p></div></div><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">1. Set some property that will ensure that the renamable flag is never set on any register - essentially what Geoff is suggesting in the latter part of his last email. I would just make it a property of TargetRegisterInfo (perhaps `virtual bool TargetRegisterInfo::allowRegisterRenaming()`).<o:p class=""></o:p></div></div></div></div></div></blockquote><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Again, yes I think we need that.<o:p class=""></o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Ok, I will put together a strawman proposal for adding this target global allowRegisterRenaming flag.<o:p class=""></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">More generally, I believe we want to step back with the renamable flag, think about its semantic and what in the infrastructure we would need to fix, if any, to make sure that semantic is preserved/preservable along the way.<o:p class=""></o:p></div></div><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">My understanding of the renamable flag is: if I see an operand with it set, I can freely change the register to any other that is a member of the register class returned by MI->getRegClassConstraint().  The renamable flag can be set to 0 for several different reasons:<o:p class=""></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div><ul type="disc" style="margin-bottom: 0in; margin-top: 0in;" class=""><li class="MsoListParagraph" style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;">ABI constraints (since liveness is not always precisely modeled).  We conservatively handle these cases by setting all physical register operands that didn’t start out as virtual regs to not be renamable.  Also any physical register operands created after register allocation will have renamable set to 0 as well.<o:p class=""></o:p></li><li class="MsoListParagraph" style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;">Opcode/target constraints: for opcodes that have complex register class requirements (e.g. that depend on other operands/instructions), we set hasExtraSrcRegAllocReq/hasExtraDstRegAllocReq in the machine description, and set renamable to 0 for these operands.  We check this property in the verifier as well.  The proposal discussed above would add a target flag that essentially says “all opcodes have these extra requirements”, so no operands would ever get marked as renamable.<o:p class=""></o:p></li></ul><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">One issue that has come up a few times is keeping the renamable flag correct when modifying code after register allocation.  In my first proposed change to add the renamable flag, I made setOpcode() and setReg() both conservative clear all renamable flags.  I believe Matthias voiced some opposition to this (I don’t recall how strong), but perhaps this is another level of conservatism that would be useful.  Taking this approach would mean that backend code would only need to change to set the renamable flag to 1 in cases where it knows it is safe to do so.</div></div></div></div></blockquote><div><br class=""></div><div>Although I can see why Matthias would push back (we're literally admitting we don’t know what we are doing when changing opcodes and registers :)), I believe that is desirable.</div><div><br class=""></div><div>The setReg part may be too much, bit the setOpcode (or setDesc) would be good to have.</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 class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div><blockquote style="margin-top: 5pt; margin-bottom: 5pt;" class="" type="cite"><div class=""><div class=""><div class=""><p class="MsoNormal" style="margin: 0in 0in 12pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;">2. We make TargetInstrInfo::getRegClass() virtual and allow the target to override it so that the extra constraints can be taken into account if it wants to allow renaming of registers<o:p class=""></o:p></p></div><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Not to suggest that the two solutions are mutually exclusive.<o:p class=""></o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">On Fri, Feb 2, 2018 at 5:57 PM, <<a href="mailto:gberry@codeaurora.org" target="_blank" style="color: purple; text-decoration: underline;" class="">gberry@codeaurora.org</a>> wrote:<o:p class=""></o:p></div><blockquote style="border-style: none none none solid; border-left-width: 1pt; border-left-color: rgb(204, 204, 204); padding: 0in 0in 0in 6pt; margin-left: 4.8pt; margin-right: 0in;" class="" type="cite"><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">I think the fix for this the way things are currently setup would be for the code that changes the COPY to the target opcode to clear the renamable bits on the operands.<o:p class=""></o:p></div></div></div></blockquote></div></div></div></blockquote><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Although it would work, I think it hints that we didn’t think the handle of the renamable flag all the way. I feel like we are reproducing the same problems that the kill flag had whereas we are trying to kill the kill flag.<o:p class=""></o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Let us no repeat history :).<o:p class=""></o:p></div></div><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><br class=""><br class=""><o:p class=""></o:p></div><blockquote style="margin-top: 5pt; margin-bottom: 5pt;" class="" type="cite"><div class=""><div class=""><div class=""><blockquote style="border-style: none none none solid; border-left-width: 1pt; border-left-color: rgb(204, 204, 204); padding: 0in 0in 0in 6pt; margin-left: 4.8pt; margin-right: 0in;" class="" type="cite"><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">If we add a target global “all opcodes are hasExtraRegAllocReq” setting, we could avoid setting any COPY operands as renamable in the first place.<o:p class=""></o:p></div><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">--<span class="Apple-converted-space"> </span><o:p class=""></o:p></div><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Geoff Berry<o:p class=""></o:p></div><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Employee of Qualcomm Datacenter Technologies, Inc.<o:p class=""></o:p></div><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc.  Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.<o:p class=""></o:p></div></div><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div><div class=""><div style="border-style: solid none none; border-top-width: 1pt; border-top-color: rgb(225, 225, 225); padding: 3pt 0in 0in;" class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><b class="">From:</b><span class="Apple-converted-space"> </span><a href="mailto:fglaser@apple.com" target="_blank" style="color: purple; text-decoration: underline;" class="">fglaser@apple.com</a><span class="Apple-converted-space"> </span>[mailto:<a href="mailto:fglaser@apple.com" target="_blank" style="color: purple; text-decoration: underline;" class="">fglaser@apple.com</a>]<span class="Apple-converted-space"> </span><b class="">On Behalf Of<span class="Apple-converted-space"> </span></b><a href="mailto:escha@apple.com" target="_blank" style="color: purple; text-decoration: underline;" class="">escha@apple.com</a><br class=""><b class="">Sent:</b><span class="Apple-converted-space"> </span>Friday, February 2, 2018 5:30 PM<br class=""><b class="">To:</b><span class="Apple-converted-space"> </span><a href="mailto:escha@apple.com" target="_blank" style="color: purple; text-decoration: underline;" class="">escha@apple.com</a><br class=""><b class="">Cc:</b><span class="Apple-converted-space"> </span><a href="mailto:gberry@codeaurora.org" target="_blank" style="color: purple; text-decoration: underline;" class="">gberry@codeaurora.org</a>;<span class="Apple-converted-space"> </span><a href="mailto:junbuml@codeaurora.org" target="_blank" style="color: purple; text-decoration: underline;" class="">junbuml@codeaurora.org</a>;<span class="Apple-converted-space"> </span><a href="mailto:marina.yatsina@intel.com" target="_blank" style="color: purple; text-decoration: underline;" class="">marina.yatsina@intel.com</a>;<span class="Apple-converted-space"> </span><a href="mailto:kannan.narayanan@amd.com" target="_blank" style="color: purple; text-decoration: underline;" class="">kannan.narayanan@amd.com</a>;<span class="Apple-converted-space"> </span><a href="mailto:nhaehnle@gmail.com" target="_blank" style="color: purple; text-decoration: underline;" class="">nhaehnle@gmail.com</a>;<span class="Apple-converted-space"> </span><a href="mailto:wei.ding2@amd.com" target="_blank" style="color: purple; text-decoration: underline;" class="">wei.ding2@amd.com</a>; Matthias Braun <<a href="mailto:matze@braunis.de" target="_blank" style="color: purple; text-decoration: underline;" class="">matze@braunis.de</a>>; Nemanja Ivanovic <<a href="mailto:nemanja.i.ibm@gmail.com" target="_blank" style="color: purple; text-decoration: underline;" class="">nemanja.i.ibm@gmail.com</a>>; llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank" style="color: purple; text-decoration: underline;" class="">llvm-commits@lists.llvm.org</a>>;<span class="Apple-converted-space"> </span><a href="mailto:reviews%2BD41835%2Bpublic%2B9c1dec7fb6e75ce0@reviews.llvm.org" target="_blank" style="color: purple; text-decoration: underline;" class="">reviews+D41835+public+9c1dec7fb6e75ce0@reviews.llvm.org</a>;<span class="Apple-converted-space"> </span><a href="mailto:tpr.llvm@botech.co.uk" target="_blank" style="color: purple; text-decoration: underline;" class="">tpr.llvm@botech.co.uk</a>;<span class="Apple-converted-space"> </span><a href="mailto:javed.absar@arm.com" target="_blank" style="color: purple; text-decoration: underline;" class="">javed.absar@arm.com</a><o:p class=""></o:p></div><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><br class=""><b class="">Subject:</b><span class="Apple-converted-space"> </span>Re: [PATCH] D41835: [MachineCopyPropagation] Extend pass to do COPY source forwarding<o:p class=""></o:p></div></div></div><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div></div></div></div><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">update: it gets worse. i can’t get the tests to pass because a lot of tests fail with this when the verifier is on:<o:p class=""></o:p></div><div class=""><pre style="margin: 0in 0in 0.0001pt 0.5in; font-size: 10pt; font-family: "Courier New"; box-sizing: border-box; white-space: pre-wrap; word-wrap: break-word; font-variant-ligatures: normal;" class=""><span style="color: rgb(51, 51, 51);" class=""> </span><o:p class=""></o:p></pre><pre style="margin: 0in 0in 0.0001pt 0.5in; font-size: 10pt; font-family: "Courier New";" class=""><span style="color: rgb(51, 51, 51);" class="">*** Bad machine code: Illegal isRenamable setting for opcode with extra regalloc requirements ***</span><o:p class=""></o:p></pre><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div></div></div><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">This occurs on our copy instructions after we expand them into actual machine opcodes, because the machine opcode for the copy instruction isn’t Renamable (none of our instructions are).<o:p class=""></o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">—escha<o:p class=""></o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div><div class=""><p class="MsoNormal" style="margin: 0in 0in 12pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;"><o:p class=""> </o:p></p><blockquote style="margin-top: 5pt; margin-bottom: 5pt;" class="" type="cite"><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">On Feb 2, 2018, at 1:37 PM, via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank" style="color: purple; text-decoration: underline;" class="">llvm-commits@lists.llvm.org</a>> wrote:<o:p class=""></o:p></div></div><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">this is probably a reasonable solution. mostly, at this point, i’m worried about the fact that upstream now apparently has a different understanding of register classes than we do (in terms of what is “safe”), which could lead to other future issues for us.<o:p class=""></o:p></div><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">—escha<o:p class=""></o:p></div><div class=""><p class="MsoNormal" style="margin: 0in 0in 12pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;"><o:p class=""> </o:p></p><blockquote style="margin-top: 5pt; margin-bottom: 5pt;" class="" type="cite"><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">On Feb 2, 2018, at 1:36 PM,<span class="Apple-converted-space"> </span><a href="mailto:gberry@codeaurora.org" target="_blank" style="color: purple; text-decoration: underline;" class="">gberry@codeaurora.org</a><span class="Apple-converted-space"> </span>wrote:<o:p class=""></o:p></div></div><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Ah, okay.  So I assume you’re okay with disabling the post-RA run of this pass for this particular target to fix this particular issue?<o:p class=""></o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div></div><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">--<span class="m4139097589071889215apple-converted-space"> </span><o:p class=""></o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Geoff Berry<o:p class=""></o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Employee of Qualcomm Datacenter Technologies, Inc.<o:p class=""></o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc.  Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.<o:p class=""></o:p></div></div></div><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div></div><div class=""><div style="border-style: solid none none; border-top-width: 1pt; border-top-color: rgb(225, 225, 225); padding: 3pt 0in 0in;" class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><b class="">From:</b><span class="m4139097589071889215apple-converted-space"> </span><a href="mailto:fglaser@apple.com" target="_blank" style="color: purple; text-decoration: underline;" class="">fglaser@apple.com</a><span class="Apple-converted-space"> </span>[<a href="mailto:fglaser@apple.com" target="_blank" style="color: purple; text-decoration: underline;" class="">mailto:fglaser@apple.com</a>]<span class="m4139097589071889215apple-converted-space"> </span><b class="">On Behalf Of<span class="m4139097589071889215apple-converted-space"> </span></b><a href="mailto:escha@apple.com" target="_blank" style="color: purple; text-decoration: underline;" class="">escha@apple.com</a><br class=""><b class="">Sent:</b><span class="m4139097589071889215apple-converted-space"> </span>Friday, February 2, 2018 4:32 PM<br class=""><b class="">To:</b><span class="m4139097589071889215apple-converted-space"> </span><a href="mailto:gberry@codeaurora.org" target="_blank" style="color: purple; text-decoration: underline;" class="">gberry@codeaurora.org</a><br class=""><b class="">Cc:</b><span class="m4139097589071889215apple-converted-space"> </span>Quentin Colombet <<a href="mailto:qcolombet@apple.com" target="_blank" style="color: purple; text-decoration: underline;" class="">qcolombet@apple.com</a>>;<span class="Apple-converted-space"> </span><a href="mailto:reviews+D41835+public+9c1dec7fb6e75ce0@reviews.llvm.org" target="_blank" style="color: purple; text-decoration: underline;" class="">reviews+D41835+public+9c1dec7fb6e75ce0@reviews.llvm.org</a>; Geoff Berry via Phabricator <<a href="mailto:reviews@reviews.llvm.org" target="_blank" style="color: purple; text-decoration: underline;" class="">reviews@reviews.llvm.org</a>>;<span class="Apple-converted-space"> </span><a href="mailto:javed.absar@arm.com" target="_blank" style="color: purple; text-decoration: underline;" class="">javed.absar@arm.com</a>; Matthias Braun <<a href="mailto:matze@braunis.de" target="_blank" style="color: purple; text-decoration: underline;" class="">matze@braunis.de</a>>; Jonas Paulsson <<a href="mailto:paulsson@linux.vnet.ibm.com" target="_blank" style="color: purple; text-decoration: underline;" class="">paulsson@linux.vnet.ibm.com</a>>;<span class="Apple-converted-space"> </span><a href="mailto:tstellar@redhat.com" target="_blank" style="color: purple; text-decoration: underline;" class="">tstellar@redhat.com</a>; Matt Arsenault <<a href="mailto:Matthew.Arsenault@amd.com" target="_blank" style="color: purple; text-decoration: underline;" class="">Matthew.Arsenault@amd.com</a>>;<span class="Apple-converted-space"> </span><a href="mailto:junbuml@codeaurora.org" target="_blank" style="color: purple; text-decoration: underline;" class="">junbuml@codeaurora.org</a>;<span class="Apple-converted-space"> </span><a href="mailto:marina.yatsina@intel.com" target="_blank" style="color: purple; text-decoration: underline;" class="">marina.yatsina@intel.com</a>;<span class="Apple-converted-space"> </span><a href="mailto:wei.ding2@amd.com" target="_blank" style="color: purple; text-decoration: underline;" class="">wei.ding2@amd.com</a>;<span class="Apple-converted-space"> </span><a href="mailto:kannan.narayanan@amd.com" target="_blank" style="color: purple; text-decoration: underline;" class="">kannan.narayanan@amd.com</a>;<span class="Apple-converted-space"> </span><a href="mailto:nhaehnle@gmail.com" target="_blank" style="color: purple; text-decoration: underline;" class="">nhaehnle@gmail.com</a>; Nemanja Ivanovic <<a href="mailto:nemanja.i.ibm@gmail.com" target="_blank" style="color: purple; text-decoration: underline;" class="">nemanja.i.ibm@gmail.com</a>>; llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank" style="color: purple; text-decoration: underline;" class="">llvm-commits@lists.llvm.org</a>>;<span class="Apple-converted-space"> </span><a href="mailto:tpr.llvm@botech.co.uk" target="_blank" style="color: purple; text-decoration: underline;" class="">tpr.llvm@botech.co.uk</a><br class=""><b class="">Subject:</b><span class="m4139097589071889215apple-converted-space"> </span>Re: [PATCH] D41835: [MachineCopyPropagation] Extend pass to do COPY source forwarding<o:p class=""></o:p></div></div></div></div><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">looking at it again, it’s making more sense: your patch enabled MachineCopyPropagation in the RA pipeline. the pass might have *already* been broken, but it wasn’t running for us, and now it is, so it broke things in that way too.<o:p class=""></o:p></div></div><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div></div></div><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">—escha<o:p class=""></o:p></div></div><div class=""><div class=""><p class="MsoNormal" style="margin: 0in 0in 12pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;"><br class=""><br class=""><o:p class=""></o:p></p></div><blockquote style="margin-top: 5pt; margin-bottom: 5pt;" class="" type="cite"><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">On Feb 2, 2018, at 1:26 PM,<span class="m4139097589071889215apple-converted-space"> </span><a href="mailto:gberry@codeaurora.org" target="_blank" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">gberry@codeaurora.org</span></a><span class="m4139097589071889215apple-converted-space"> </span>wrote:<o:p class=""></o:p></div></div></div><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div></div><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">escha,<o:p class=""></o:p></div></div></div><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div></div></div><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">I’m confused by your comment about bundles.  It was known that this patch doesn’t handle forwarding into bundles, but it sounds like to me you are seeing problems with the dead COPY removal part of this pass, which was not intentionally changed by this patch (other than adding a DEBUG statement when it happens).<o:p class=""></o:p></div></div></div><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">--<span class="m4139097589071889215apple-converted-space"> </span><o:p class=""></o:p></div></div></div><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Geoff Berry<o:p class=""></o:p></div></div></div><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Employee of Qualcomm Datacenter Technologies, Inc.<o:p class=""></o:p></div></div></div><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc.  Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.<o:p class=""></o:p></div></div></div></div><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div></div></div><div class=""><div style="border-style: solid none none; border-top-width: 1pt; border-top-color: rgb(225, 225, 225); padding: 3pt 0in 0in;" class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><b class="">From:</b><span class="m4139097589071889215apple-converted-space"> </span><a href="mailto:fglaser@apple.com" target="_blank" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">fglaser@apple.com</span></a><span class="m4139097589071889215apple-converted-space"> </span>[<a href="mailto:fglaser@apple.com" target="_blank" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">mailto:fglaser@apple.com</span></a>]<span class="m4139097589071889215apple-converted-space"> </span><b class="">On Behalf Of<span class="m4139097589071889215apple-converted-space"> </span></b><a href="mailto:escha@apple.com" target="_blank" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">escha@apple.com</span></a><br class=""><b class="">Sent:</b><span class="m4139097589071889215apple-converted-space"> </span>Friday, February 2, 2018 4:10 PM<br class=""><b class="">To:</b><span class="m4139097589071889215apple-converted-space"> </span>Quentin Colombet <<a href="mailto:qcolombet@apple.com" target="_blank" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">qcolombet@apple.com</span></a>><br class=""><b class="">Cc:</b><span class="m4139097589071889215apple-converted-space"> </span>Geoff Berry <<a href="mailto:gberry@codeaurora.org" target="_blank" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">gberry@codeaurora.org</span></a>>;<span class="m4139097589071889215apple-converted-space"> </span><a href="mailto:reviews+D41835+public+9c1dec7fb6e75ce0@reviews.llvm.org" target="_blank" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">reviews+D41835+public+9c1dec7fb6e75ce0@reviews.llvm.org</span></a>; Geoff Berry via Phabricator <<a href="mailto:reviews@reviews.llvm.org" target="_blank" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">reviews@reviews.llvm.org</span></a>>;<span class="m4139097589071889215apple-converted-space"> </span><a href="mailto:javed.absar@arm.com" target="_blank" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">javed.absar@arm.com</span></a>; Matthias Braun <<a href="mailto:matze@braunis.de" target="_blank" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">matze@braunis.de</span></a>>; Jonas Paulsson <<a href="mailto:paulsson@linux.vnet.ibm.com" target="_blank" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">paulsson@linux.vnet.ibm.com</span></a>>;<span class="m4139097589071889215apple-converted-space"> </span><a href="mailto:tstellar@redhat.com" target="_blank" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">tstellar@redhat.com</span></a>; Matt Arsenault <<a href="mailto:Matthew.Arsenault@amd.com" target="_blank" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">Matthew.Arsenault@amd.com</span></a>>;<span class="m4139097589071889215apple-converted-space"> </span><a href="mailto:junbuml@codeaurora.org" target="_blank" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">junbuml@codeaurora.org</span></a>;<span class="m4139097589071889215apple-converted-space"> </span><a href="mailto:marina.yatsina@intel.com" target="_blank" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">marina.yatsina@intel.com</span></a>;<span class="m4139097589071889215apple-converted-space"> </span><a href="mailto:wei.ding2@amd.com" target="_blank" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">wei.ding2@amd.com</span></a>;<span class="m4139097589071889215apple-converted-space"> </span><a href="mailto:kannan.narayanan@amd.com" target="_blank" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">kannan.narayanan@amd.com</span></a>;<span class="m4139097589071889215apple-converted-space"> </span><a href="mailto:nhaehnle@gmail.com" target="_blank" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">nhaehnle@gmail.com</span></a>; Nemanja Ivanovic <<a href="mailto:nemanja.i.ibm@gmail.com" target="_blank" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">nemanja.i.ibm@gmail.com</span></a>>; llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">llvm-commits@lists.llvm.org</span></a>>;<span class="m4139097589071889215apple-converted-space"> </span><a href="mailto:tpr.llvm@botech.co.uk" target="_blank" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">tpr.llvm@botech.co.uk</span></a><br class=""><b class="">Subject:</b><span class="m4139097589071889215apple-converted-space"> </span>Re: [PATCH] D41835: [MachineCopyPropagation] Extend pass to do COPY source forwarding<o:p class=""></o:p></div></div></div></div></div><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div></div></div><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div></div></div><div class=""><div class=""><div class=""><p class="MsoNormal" style="margin: 0in 0in 12pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;"><br class=""><br class=""><br class=""><o:p class=""></o:p></p></div></div><blockquote style="margin-top: 5pt; margin-bottom: 5pt;" class="" type="cite"><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">On Feb 2, 2018, at 12:55 PM, Quentin Colombet <<a href="mailto:qcolombet@apple.com" target="_blank" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">qcolombet@apple.com</span></a>> wrote:<o:p class=""></o:p></div></div></div></div><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div></div></div><div class=""><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div></div></div><div class=""><div class=""><div class=""><p class="MsoNormal" style="margin: 0in 0in 12pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;"><br class=""><br class=""><br class=""><o:p class=""></o:p></p></div></div><blockquote style="margin-top: 5pt; margin-bottom: 5pt;" class="" type="cite"><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">On Feb 2, 2018, at 12:21 PM,<span class="m4139097589071889215apple-converted-space"> </span><a href="mailto:escha@apple.com" target="_blank" style="color: purple; text-decoration: underline;" class=""><span style="color: purple;" class="">escha@apple.com</span></a><span class="m4139097589071889215apple-converted-space"> </span>wrote:<o:p class=""></o:p></div></div></div></div><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div></div></div><div class=""><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">I mean, in that case we are likely to have to mark every single opcode (all 12,000 or so) with this requirement. At that point we might as well just opt out of the pass, I think? At least, it feels like a gross hack that papers over the fact that LLVM has changed how register classes work such that our entire approach is no longer valid.<o:p class=""></o:p></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Also, it seems very weird to make this constraint-violating behavior *opt-out*. Maybe it should be opt-in, i.e. put doesNotHaveExtraSrcRegAllocReq on all instructions it’s okay for?<o:p class=""></o:p></div></div></div></div></div></div></blockquote><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">That sounds like a better approach to me.<o:p class=""></o:p></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">After talking with escha, I agree that TableGen is not necessarily expressive enough to model all the constraints that need to be met and I would err on the safe side of being opt-in instead of opt-out.<o:p class=""></o:p></div></div></div></div></div></div></div></blockquote><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">this is actually worse than i initially realized. one of our targets is VLIW and is completely broken by this patch, *even if we opt out as described*, because it doesn’t iterate over the operands of a bundle. so for example:<o:p class=""></o:p></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">r3 = COPY foo<o:p class=""></o:p></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">BUNDLE_TYPE_FOO<o:p class=""></o:p></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><thing that uses r3><o:p class=""></o:p></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">END<o:p class=""></o:p></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">it believes that r3 is dead because it doesn’t iterate over the bundle operands, so it never sees the use of r3.<o:p class=""></o:p></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div></div></div></div><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">—escha<o:p class=""></o:p></div></div></div></div></div></blockquote></div></div></div></div></blockquote></div><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div></div></div><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">_______________________________________________<br class="">llvm-commits mailing list<br class=""><a href="mailto:llvm-commits@lists.llvm.org" target="_blank" style="color: purple; text-decoration: underline;" class="">llvm-commits@lists.llvm.org</a><br class=""><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" target="_blank" style="color: purple; text-decoration: underline;" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><o:p class=""></o:p></div></div></blockquote></div><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""> <o:p class=""></o:p></div></div></div></div></div></div></blockquote></div><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class=""> </o:p></div></div><div style="margin: 0in 0in 0.0001pt 0.5in; font-size: 11pt; font-family: Calibri, sans-serif;" class="">_______________________________________________<br class="">llvm-commits mailing list<br class=""><a href="mailto:llvm-commits@lists.llvm.org" style="color: purple; text-decoration: underline;" class="">llvm-commits@lists.llvm.org</a><br class=""><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" style="color: purple; text-decoration: underline;" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a></div></div></blockquote></div></div></div></blockquote></div><br class=""></body></html>