<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="">oh no problem, you’re not being difficult! it’s a subtle issue and this part of the compilation pipeline is honestly a mess.<div class=""><br class=""></div><div class="">the problem here is that after regalloc, *the constraints are lost*, because you no longer have vregs and vreg classes. so for example, while you might have a “gpr32nosr” operand before alloc, now you just have “r2”. at least, i think that’s my understanding of it, going by matthias and quentin’s explanations?</div><div class=""><br class=""></div><div class="">—escha<br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Feb 2, 2018, at 1:28 PM, Nemanja Ivanovic <<a href="mailto:nemanja.i.ibm@gmail.com" class="">nemanja.i.ibm@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class="">Sure, but won't getRegClassConstraint() just return a nullptr in which case the copy source forwarding can't happen?<br class=""><br class=""></div>Sorry, I'm really not trying to be difficult, just to understand the issue more thoroughly.<br class=""></div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Fri, Feb 2, 2018 at 4:23 PM,  <span dir="ltr" class=""><<a href="mailto:escha@apple.com" target="_blank" class="">escha@apple.com</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word;line-break:after-white-space" class="">The problem is that MCInstrDesc can only represent a static set of operands and register classes. In practice, targets may need to apply extra constraints to a given instruction, constraints which are not constant per-opcode.<div class=""><br class=""></div><div class="">An extreme example is our sample instructions, which are entirely manually constructed: the tablegen definitions literally define the inputs as “unknown_tuple” and we assign the actual classes in instruction selection based on the parameters. This is necessary because the number of possible permutations of sample instructions is obscenely prohibitive and it would be fairly unreasonable to have a separate opcode for each one.</div><div class=""><br class=""></div><div class="">—escha<div class=""><div class="h5"><br class=""><div class=""><br class=""><blockquote type="cite" class=""><div class="">On Feb 2, 2018, at 1:18 PM, Nemanja Ivanovic <<a href="mailto:nemanja.i.ibm@gmail.com" target="_blank" class="">nemanja.i.ibm@gmail.com</a>> wrote:</div><br class="m_-6048132606610547923Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class=""><div class="">Forgive me if I am misinterpreting what the suggestion is, but 
while I agree that a pass with the potential to break things should be 
opt-in rather than opt-out, I'm curious about a couple of things:<br class=""><br class=""></div>1.
 The granularity of the opt-in/opt-out. Seems that as Escha pointed out,
 opting out for every instruction that could receive a result of a copy 
can be prohibitive. But equivalently, opting in for every instruction 
can be quite daunting as well. Would it make more sense for the pass 
itself to be opt-in only and then instructions themselves to be opt-out?
 That way targets that can just use the pass as-is can just go ahead and
 opt-in (and fix any instructions that need to opt out) and targets for 
which it would be prohibitive to do this per-instruction opt-out would 
simply just not opt-in to the pass.<br class=""></div><br class="">2. Seems like the issue that Escha describes can be handled in the pass by ensuring that the source is forwarded only if it is a register that is in the register class for the user of the copy. Isn't everything required for this available from MCInstrDesc and TargetRegisterClass? Or maybe I'm misinterpreting what the problem actually is...<br class=""></div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Fri, Feb 2, 2018 at 4:10 PM,  <span dir="ltr" class=""><<a href="mailto:gberry@codeaurora.org" target="_blank" class="">gberry@codeaurora.org</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div link="blue" vlink="purple" lang="EN-US" class=""><div class="m_-6048132606610547923m_5379822803082636775WordSection1"><p class="MsoNormal">In the case of AMDGPU there were just one or two opcode base classes in the td files that needed to have the hasExtraSrcRegAllocReq attribute added, so it wasn’t a big deal.<u class=""></u><u class=""></u></p><p class="MsoNormal">I don’t think flipping the default value of this opcode property makes sense, as that would involve changing all of the opcodes (or their base classes) in all of the in-tree targets (other than AMDGPU).<u class=""></u><u class=""></u></p><p class="MsoNormal">How about a target property that says “all opcodes are hasExtraSrcRegAllocReq”? <u class=""></u><u class=""></u></p><span class=""><p class="MsoNormal"><u class=""></u> <u class=""></u></p><div class=""><p class="MsoNormal">-- <u class=""></u><u class=""></u></p><p class="MsoNormal">Geoff Berry<u class=""></u><u class=""></u></p><p class="MsoNormal">Employee of Qualcomm Datacenter Technologies, Inc.<u class=""></u><u class=""></u></p><p class="MsoNormal"> 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.<u class=""></u><u class=""></u></p></div><p class="MsoNormal"><u class=""></u> <u class=""></u></p></span><div class=""><div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0in 0in 0in" class=""><p class="MsoNormal"><b class="">From:</b> <a href="mailto:qcolombet@apple.com" target="_blank" class="">qcolombet@apple.com</a> [mailto:<a href="mailto:qcolombet@apple.com" target="_blank" class="">qcolombet@apple.com</a>] <br class=""><b class="">Sent:</b> Friday, February 2, 2018 3:55 PM<br class=""><b class="">To:</b> Geoff Berry <<a href="mailto:gberry@codeaurora.org" target="_blank" class="">gberry@codeaurora.org</a>><br class=""><b class="">Cc:</b> <a href="mailto:reviews%2BD41835%2Bpublic%2B9c1dec7fb6e75ce0@reviews.llvm.org" target="_blank" class="">reviews+D41835+public+9c1dec7f<wbr class="">b6e75ce0@reviews.llvm.org</a>; Geoff Berry via Phabricator <<a href="mailto:reviews@reviews.llvm.org" target="_blank" class="">reviews@reviews.llvm.org</a>>; <a href="mailto:javed.absar@arm.com" target="_blank" class="">javed.absar@arm.com</a>; Matthias Braun <<a href="mailto:matze@braunis.de" target="_blank" class="">matze@braunis.de</a>>; Jonas Paulsson <<a href="mailto:paulsson@linux.vnet.ibm.com" target="_blank" class="">paulsson@linux.vnet.ibm.com</a>>; <a href="mailto:tstellar@redhat.com" target="_blank" class="">tstellar@redhat.com</a>; Matt Arsenault <<a href="mailto:Matthew.Arsenault@amd.com" target="_blank" class="">Matthew.Arsenault@amd.com</a>>; <a href="mailto:junbuml@codeaurora.org" target="_blank" class="">junbuml@codeaurora.org</a>; <a href="mailto:marina.yatsina@intel.com" target="_blank" class="">marina.yatsina@intel.com</a>; <a href="mailto:wei.ding2@amd.com" target="_blank" class="">wei.ding2@amd.com</a>; <a href="mailto:kannan.narayanan@amd.com" target="_blank" class="">kannan.narayanan@amd.com</a>; <a href="mailto:nhaehnle@gmail.com" target="_blank" class="">nhaehnle@gmail.com</a>; Nemanja Ivanovic <<a href="mailto:nemanja.i.ibm@gmail.com" target="_blank" class="">nemanja.i.ibm@gmail.com</a>>; llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank" class="">llvm-commits@lists.llvm.org</a>>; <a href="mailto:tpr.llvm@botech.co.uk" target="_blank" class="">tpr.llvm@botech.co.uk</a>; <a href="mailto:escha@apple.com" target="_blank" class="">escha@apple.com</a></p><div class=""><div class="m_-6048132606610547923h5"><br class=""><b class="">Subject:</b> Re: [PATCH] D41835: [MachineCopyPropagation] Extend pass to do COPY source forwarding<u class=""></u><u class=""></u></div></div><div class=""><br class="m_-6048132606610547923webkit-block-placeholder"></div></div></div><div class=""><div class="m_-6048132606610547923h5"><p class="MsoNormal"><u class=""></u> <u class=""></u></p><p class="MsoNormal"><u class=""></u> <u class=""></u></p><div class=""><p class="MsoNormal"><br class=""><br class=""><u class=""></u><u class=""></u></p><blockquote style="margin-top:5.0pt;margin-bottom:5.0pt" class=""><div class=""><p class="MsoNormal">On Feb 2, 2018, at 12:21 PM, <a href="mailto:escha@apple.com" target="_blank" class="">escha@apple.com</a> wrote:<u class=""></u><u class=""></u></p></div><p class="MsoNormal"><u class=""></u> <u class=""></u></p><div class=""><div class=""><p class="MsoNormal">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.<u class=""></u><u class=""></u></p><div class=""><p class="MsoNormal"><u class=""></u> <u class=""></u></p></div><div class=""><p class="MsoNormal">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?<u class=""></u><u class=""></u></p></div></div></div></blockquote><div class=""><p class="MsoNormal"><u class=""></u> <u class=""></u></p></div><div class=""><p class="MsoNormal">That sounds like a better approach to me.<u class=""></u><u class=""></u></p></div><div class=""><p class="MsoNormal">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.<u class=""></u><u class=""></u></p></div><p class="MsoNormal"><br class=""><br class=""><u class=""></u><u class=""></u></p><blockquote style="margin-top:5.0pt;margin-bottom:5.0pt" class=""><div class=""><div class=""><div class=""><p class="MsoNormal"><u class=""></u> <u class=""></u></p></div><div class=""><p class="MsoNormal">—escha<u class=""></u><u class=""></u></p><div class=""><p class="MsoNormal"><br class=""><br class=""><u class=""></u><u class=""></u></p><blockquote style="margin-top:5.0pt;margin-bottom:5.0pt" class=""><div class=""><p class="MsoNormal">On Feb 2, 2018, at 12:17 PM, <a href="mailto:gberry@codeaurora.org" target="_blank" class="">gberry@codeaurora.org</a> wrote:<u class=""></u><u class=""></u></p></div><p class="MsoNormal"><u class=""></u> <u class=""></u></p><div class=""><div class=""><p class="MsoNormal">Hi escha,<span class="m_-6048132606610547923m_5379822803082636775apple-converted-space"> </span><u class=""></u><u class=""></u></p></div><div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p></div><div class=""><p class="MsoNormal">This sounds very similar to the issues this change caused on AMDGPU.  The way we worked around them for those effected targets was to mark the relevant opcodes with hasExtraSrcRegAllocReq, which will prevent the MachineOperands from being marked as isRenamable, which will in turn prevent MachineCopyPropagation from changing them.  Is this a reasonable fix for your targets?<u class=""></u><u class=""></u></p></div><div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p></div><div class=""><div class=""><p class="MsoNormal">--<span class="m_-6048132606610547923m_5379822803082636775apple-converted-space"> </span><u class=""></u><u class=""></u></p></div><div class=""><p class="MsoNormal">Geoff Berry<u class=""></u><u class=""></u></p></div><div class=""><p class="MsoNormal">Employee of Qualcomm Datacenter Technologies, Inc.<u class=""></u><u class=""></u></p></div><div class=""><p class="MsoNormal">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.<u class=""></u><u class=""></u></p></div></div><div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p></div><div class=""><div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0in 0in 0in" class=""><div class=""><p class="MsoNormal"><b class="">From:</b><span class="m_-6048132606610547923m_5379822803082636775apple-converted-space"> </span><a href="mailto:fglaser@apple.com" target="_blank" class="">fglaser@apple.com</a> [<a href="mailto:fglaser@apple.com" target="_blank" class="">mailto:fglaser@apple.com</a>]<span class="m_-6048132606610547923m_5379822803082636775apple-converted-space"> </span><b class="">On Behalf Of<span class="m_-6048132606610547923m_5379822803082636775apple-converted-space"> </span></b><a href="mailto:escha@apple.com" target="_blank" class="">escha@apple.com</a><br class=""><b class="">Sent:</b><span class="m_-6048132606610547923m_5379822803082636775apple-converted-space"> </span>Friday, February 2, 2018 2:56 PM<br class=""><b class="">To:</b><span class="m_-6048132606610547923m_5379822803082636775apple-converted-space"> </span><a href="mailto:reviews+D41835+public+9c1dec7fb6e75ce0@reviews.llvm.org" target="_blank" class="">reviews+D41835+public+9c1d<wbr class="">ec7fb6e75ce0@reviews.llvm.org</a>; Geoff Berry via Phabricator <<a href="mailto:reviews@reviews.llvm.org" target="_blank" class="">reviews@reviews.llvm.org</a>><br class=""><b class="">Cc:</b><span class="m_-6048132606610547923m_5379822803082636775apple-converted-space"> </span><a href="mailto:gberry@codeaurora.org" target="_blank" class="">gberry@codeaurora.org</a>; <a href="mailto:qcolombet@apple.com" target="_blank" class="">qcolombet@apple.com</a>; <a href="mailto:javed.absar@arm.com" target="_blank" class="">javed.absar@arm.com</a>; <a href="mailto:matze@braunis.de" target="_blank" class="">matze@braunis.de</a>; <a href="mailto:paulsson@linux.vnet.ibm.com" target="_blank" class="">paulsson@linux.vnet.ibm.com</a>; <a href="mailto:tstellar@redhat.com" target="_blank" class="">tstellar@redhat.com</a>; <a href="mailto:Matthew.Arsenault@amd.com" target="_blank" class="">Matthew.Arsenault@amd.com</a>; <a href="mailto:junbuml@codeaurora.org" target="_blank" class="">junbuml@codeaurora.org</a>; <a href="mailto:marina.yatsina@intel.com" target="_blank" class="">marina.yatsina@intel.com</a>; <a href="mailto:wei.ding2@amd.com" target="_blank" class="">wei.ding2@amd.com</a>; <a href="mailto:kannan.narayanan@amd.com" target="_blank" class="">kannan.narayanan@amd.com</a>; <a href="mailto:nhaehnle@gmail.com" target="_blank" class="">nhaehnle@gmail.com</a>; <a href="mailto:nemanja.i.ibm@gmail.com" target="_blank" class="">nemanja.i.ibm@gmail.com</a>; <a href="mailto:llvm-commits@lists.llvm.org" target="_blank" class="">llvm-commits@lists.llvm.org</a>; <a href="mailto:tpr.llvm@botech.co.uk" target="_blank" class="">tpr.llvm@botech.co.uk</a><br class=""><b class="">Subject:</b><span class="m_-6048132606610547923m_5379822803082636775apple-converted-space"> </span>Re: [PATCH] D41835: [MachineCopyPropagation] Extend pass to do COPY source forwarding<u class=""></u><u class=""></u></p></div></div></div><div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p></div><div class=""><p class="MsoNormal">FYI, this completely broke our (out-of-tree) backends in more ways than i can count. In particular, it seems to break the ability for us to enforce constraints on register classes at all: we heavily rely on this for a wide variety of instructions whose behavior cannot be fully expressed in tablegen, or really, anywhere that we need to say “X argument of Y instruction should be constrained to class Z”.<u class=""></u><u class=""></u></p></div><div class=""><div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><p class="MsoNormal">Here is one particular example that illustrates this (but what breaks is potentially far more than this).<u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><p class="MsoNormal">Suppose you have a machine in which instructions can have at most 2 arguments in the category {immediates, special registers}. We limit immediates to 2 in instruction selection, and then run a small pass after instruction selection that identifies any instructions with more than 2 {immediates, special registers} and marks the special register arguments as “no SR”. For example:<u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><div class=""><p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo",serif;background:white" class="">%6:gpr32 = COPY $sr12</span><u class=""></u><u class=""></u></p></div></div></div><div class=""><div class=""><p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo",serif;background:white" class=""><br class=""><br class=""><br class=""></span><u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><p class="MsoNormal">becomes<u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><p class="MsoNormal"><span style="font-size:8.5pt;font-family:"Menlo",serif;background:white" class="">%6:gpr32nosr = COPY $sr12</span><u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><p class="MsoNormal">reasonably, this should mean the COPY cannot be folded into the instruction that uses it, because the argument is a “gpr32nosr”, which prohibits special registers.<u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><p class="MsoNormal">however, with this patch…<u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><div class=""><p class="MsoNormal" style="background:white"><span style="font-size:8.5pt;font-family:"Menlo",serif" class=""># *** IR Dump After Greedy Register Allocator ***:</span><u class=""></u><u class=""></u></p></div></div></div><div class=""><div class=""><p class="MsoNormal" style="background:white"><span style="font-size:8.5pt;font-family:"Menlo",serif" class="">%6:gpr32nosr = COPY $sr12</span><u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><p class="MsoNormal" style="background:white"><span style="font-size:8.5pt;font-family:"Menlo",serif" class="">%12.sub2:gpr32tup3 = /* some instruction */ 0, 0, %6, 0, 4294967312, 0, 0</span><u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><p class="MsoNormal" style="background:white"><span style="font-size:8.5pt;font-family:"Menlo",serif" class=""># *** IR Dump After Virtual Register Rewriter ***:</span><u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><div class=""><p class="MsoNormal" style="background:white"><span style="font-size:8.5pt;font-family:"Menlo",serif" class="">renamable $r2 = COPY $sr12</span><u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><p class="MsoNormal" style="background:white"><span style="font-size:8.5pt;font-family:"Menlo",serif" class="">renamable $r2 = /* some instruction */ 0, 0, %6, 0, 4294967312, 0, 0</span><u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><p class="MsoNormal" style="background:white"><span style="font-size:8.5pt;font-family:"Menlo",serif" class="">[…]</span><u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><p class="MsoNormal" style="background:white"><span style="font-size:8.5pt;font-family:"Menlo",serif" class=""># *** IR Dump After Machine Copy Propagation Pass ***:</span><u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><p class="MsoNormal" style="background:white"><span style="font-size:8.5pt;font-family:"Menlo",serif" class="">renamable $r2 = /* some instruction */ 0, 0, $sr12, 0, 4294967312, 0, 0</span><u class=""></u><u class=""></u></p></div></div></div><div class=""><div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><p class="MsoNormal">in the second step the information that “%6” cannot be an SR is lost due to register allocation, and then copy propagation happily plows through and violates the constraint we set earlier.<u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><p class="MsoNormal">this is the simplest example, but this entire patch makes me extremely nervous because we rely on register classes heavily in our backend and if the compiler is now free to violate our constraints, all bets are off.<u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p></div></div><div class=""><div class=""><p class="MsoNormal">—escha<u class=""></u><u class=""></u></p></div><div class=""><div class=""><div class=""><div class=""><p class="MsoNormal"><br class=""><br class=""><br class=""><u class=""></u><u class=""></u></p></div><blockquote style="margin-top:5.0pt;margin-bottom:5.0pt" class=""><div class=""><div class=""><p class="MsoNormal">On Feb 1, 2018, at 10:56 AM, Geoff Berry via Phabricator via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank" class=""><span style="color:purple" class="">llvm-commits@lists.llvm.org</span></a>> wrote:<u class=""></u><u class=""></u></p></div></div><div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p></div><div class=""><div class=""><div class=""><p class="MsoNormal">This revision was automatically updated to reflect the committed changes.<br class="">Closed by commit rL323991: [MachineCopyPropagation] Extend pass to do COPY source forwarding (authored by gberry, committed by ).<br class=""><br class="">Changed prior to commit:<br class=""> <a href="https://reviews.llvm.org/D41835?vs=131323&id=132429#toc" target="_blank" class=""><span style="color:purple" class="">https://reviews.llvm.org/D418<wbr class="">35?vs=131323&id=132429#toc</span></a><br class=""><br class="">Repository:<br class=""> rL LLVM<br class=""><br class=""><a href="https://reviews.llvm.org/D41835" target="_blank" class=""><span style="color:purple" class="">https://reviews.llvm.org/D4183<wbr class="">5</span></a><br class=""><br class="">Files:<br class=""> llvm/trunk/lib/CodeGen/Machin<wbr class="">eCopyPropagation.cpp<br class=""> llvm/trunk/lib/CodeGen/Target<wbr class="">PassConfig.cpp<br class=""> llvm/trunk/test/CodeGen/AArch<wbr class="">64/aarch64-fold-lslfast.ll<br class=""> llvm/trunk/test/CodeGen/AArch<wbr class="">64/arm64-AdvSIMD-Scalar.ll<br class=""> llvm/trunk/test/CodeGen/AArch<wbr class="">64/arm64-zero-cycle-regmov.ll<br class=""> llvm/trunk/test/CodeGen/AArch<wbr class="">64/cmpxchg-idioms.ll<br class=""> llvm/trunk/test/CodeGen/AArch<wbr class="">64/copyprop.mir<br class=""> llvm/trunk/test/CodeGen/AArch<wbr class="">64/f16-instructions.ll<br class=""> llvm/trunk/test/CodeGen/AArch<wbr class="">64/flags-multiuse.ll<br class=""> llvm/trunk/test/CodeGen/AArch<wbr class="">64/ldst-opt.ll<br class=""> llvm/trunk/test/CodeGen/AArch<wbr class="">64/merge-store-dependency.ll<br class=""> llvm/trunk/test/CodeGen/AArch<wbr class="">64/neg-imm.ll<br class=""> llvm/trunk/test/CodeGen/AMDGP<wbr class="">U/callee-special-input-sgprs.<wbr class="">ll<br class=""> llvm/trunk/test/CodeGen/AMDGP<wbr class="">U/fix-vgpr-copies.mir<br class=""> llvm/trunk/test/CodeGen/AMDGP<wbr class="">U/multilevel-break.ll<br class=""> llvm/trunk/test/CodeGen/AMDGP<wbr class="">U/ret.ll<br class=""> llvm/trunk/test/CodeGen/ARM/a<wbr class="">tomic-op.ll<br class=""> llvm/trunk/test/CodeGen/ARM/i<wbr class="">ntrinsics-overflow.ll<br class=""> llvm/trunk/test/CodeGen/ARM/s<wbr class="">elect-imm.ll<br class=""> llvm/trunk/test/CodeGen/ARM/s<wbr class="">wifterror.ll<br class=""> llvm/trunk/test/CodeGen/Mips/<wbr class="">llvm-ir/ashr.ll<br class=""> llvm/trunk/test/CodeGen/Mips/<wbr class="">llvm-ir/lshr.ll<br class=""> llvm/trunk/test/CodeGen/Mips/<wbr class="">llvm-ir/shl.ll<br class=""> llvm/trunk/test/CodeGen/Mips/<wbr class="">llvm-ir/sub.ll<br class=""> llvm/trunk/test/CodeGen/Power<wbr class="">PC/MCSE-caller-preserved-reg.<wbr class="">ll<br class=""> llvm/trunk/test/CodeGen/Power<wbr class="">PC/fma-mutate.ll<br class=""> llvm/trunk/test/CodeGen/Power<wbr class="">PC/gpr-vsr-spill.ll<br class=""> llvm/trunk/test/CodeGen/Power<wbr class="">PC/licm-remat.ll<br class=""> llvm/trunk/test/CodeGen/Power<wbr class="">PC/opt-li-add-to-addi.ll<br class=""> llvm/trunk/test/CodeGen/Power<wbr class="">PC/tail-dup-layout.ll<br class=""> llvm/trunk/test/CodeGen/SPARC<wbr class="">/32abi.ll<br class=""> llvm/trunk/test/CodeGen/SPARC<wbr class="">/atomics.ll<br class=""> llvm/trunk/test/CodeGen/Syste<wbr class="">mZ/vec-sub-01.ll<br class=""> llvm/trunk/test/CodeGen/Thumb<wbr class="">/pr35836.ll<br class=""> llvm/trunk/test/CodeGen/Thumb<wbr class="">/thumb-shrink-wrapping.ll<br class=""> llvm/trunk/test/CodeGen/X86/2<wbr class="">006-03-01-InstrSchedBug.ll<br class=""> llvm/trunk/test/CodeGen/X86/a<wbr class="">rg-copy-elide.ll<br class=""> llvm/trunk/test/CodeGen/X86/a<wbr class="">vx-load-store.ll<br class=""> llvm/trunk/test/CodeGen/X86/a<wbr class="">vx512-bugfix-25270.ll<br class=""> llvm/trunk/test/CodeGen/X86/a<wbr class="">vx512-calling-conv.ll<br class=""> llvm/trunk/test/CodeGen/X86/a<wbr class="">vx512-regcall-NoMask.ll<br class=""> llvm/trunk/test/CodeGen/X86/a<wbr class="">vx512bw-intrinsics-fast-isel.l<wbr class="">l<br class=""> llvm/trunk/test/CodeGen/X86/a<wbr class="">vx512bw-intrinsics-upgrade.ll<br class=""> llvm/trunk/test/CodeGen/X86/b<wbr class="">uildvec-insertvec.ll<br class=""> llvm/trunk/test/CodeGen/X86/c<wbr class="">ombine-fcopysign.ll<br class=""> llvm/trunk/test/CodeGen/X86/c<wbr class="">ombine-shl.ll<br class=""> llvm/trunk/test/CodeGen/X86/c<wbr class="">omplex-fastmath.ll<br class=""> llvm/trunk/test/CodeGen/X86/d<wbr class="">ivide-by-constant.ll<br class=""> llvm/trunk/test/CodeGen/X86/f<wbr class="">maxnum.ll<br class=""> llvm/trunk/test/CodeGen/X86/f<wbr class="">mf-flags.ll<br class=""> llvm/trunk/test/CodeGen/X86/f<wbr class="">minnum.ll<br class=""> llvm/trunk/test/CodeGen/X86/f<wbr class="">p128-i128.ll<br class=""> llvm/trunk/test/CodeGen/X86/h<wbr class="">-registers-1.ll<br class=""> llvm/trunk/test/CodeGen/X86/h<wbr class="">addsub-2.ll<br class=""> llvm/trunk/test/CodeGen/X86/h<wbr class="">addsub-3.ll<br class=""> llvm/trunk/test/CodeGen/X86/h<wbr class="">addsub-undef.ll<br class=""> llvm/trunk/test/CodeGen/X86/h<wbr class="">alf.ll<br class=""> llvm/trunk/test/CodeGen/X86/h<wbr class="">orizontal-reduce-smax.ll<br class=""> llvm/trunk/test/CodeGen/X86/h<wbr class="">orizontal-reduce-smin.ll<br class=""> llvm/trunk/test/CodeGen/X86/h<wbr class="">orizontal-reduce-umax.ll<br class=""> llvm/trunk/test/CodeGen/X86/h<wbr class="">orizontal-reduce-umin.ll<br class=""> llvm/trunk/test/CodeGen/X86/i<wbr class="">nline-asm-fpstack.ll<br class=""> llvm/trunk/test/CodeGen/X86/i<wbr class="">pra-local-linkage.ll<br class=""> llvm/trunk/test/CodeGen/X86/l<wbr class="">ocalescape.ll<br class=""> llvm/trunk/test/CodeGen/X86/m<wbr class="">achine-cp.ll<br class=""> llvm/trunk/test/CodeGen/X86/m<wbr class="">ul-i1024.ll<br class=""> llvm/trunk/test/CodeGen/X86/m<wbr class="">ul-i256.ll<br class=""> llvm/trunk/test/CodeGen/X86/m<wbr class="">ul-i512.ll<br class=""> llvm/trunk/test/CodeGen/X86/m<wbr class="">ul128.ll<br class=""> llvm/trunk/test/CodeGen/X86/m<wbr class="">ulvi32.ll<br class=""> llvm/trunk/test/CodeGen/X86/p<wbr class="">mul.ll<br class=""> llvm/trunk/test/CodeGen/X86/p<wbr class="">owi.ll<br class=""> llvm/trunk/test/CodeGen/X86/p<wbr class="">r11334.ll<br class=""> llvm/trunk/test/CodeGen/X86/p<wbr class="">r29112.ll<br class=""> llvm/trunk/test/CodeGen/X86/p<wbr class="">r34080-2.ll<br class=""> llvm/trunk/test/CodeGen/X86/p<wbr class="">subus.ll<br class=""> llvm/trunk/test/CodeGen/X86/r<wbr class="">etpoline-external.ll<br class=""> llvm/trunk/test/CodeGen/X86/r<wbr class="">etpoline.ll<br class=""> llvm/trunk/test/CodeGen/X86/s<wbr class="">ad.ll<br class=""> llvm/trunk/test/CodeGen/X86/s<wbr class="">afestack.ll<br class=""> llvm/trunk/test/CodeGen/X86/s<wbr class="">afestack_inline.ll<br class=""> llvm/trunk/test/CodeGen/X86/s<wbr class="">calar_widen_div.ll<br class=""> llvm/trunk/test/CodeGen/X86/s<wbr class="">elect.ll<br class=""> llvm/trunk/test/CodeGen/X86/s<wbr class="">hrink-wrap-chkstk.ll<br class=""> llvm/trunk/test/CodeGen/X86/s<wbr class="">low-pmulld.ll<br class=""> llvm/trunk/test/CodeGen/X86/s<wbr class="">qrt-fastmath.ll<br class=""> llvm/trunk/test/CodeGen/X86/s<wbr class="">se-scalar-fp-arith.ll<br class=""> llvm/trunk/test/CodeGen/X86/s<wbr class="">se1.ll<br class=""> llvm/trunk/test/CodeGen/X86/s<wbr class="">se3-avx-addsub-2.ll<br class=""> llvm/trunk/test/CodeGen/X86/s<wbr class="">tatepoint-live-in.ll<br class=""> llvm/trunk/test/CodeGen/X86/s<wbr class="">tatepoint-stack-usage.ll<br class=""> llvm/trunk/test/CodeGen/X86/v<wbr class="">ec_fp_to_int.ll<br class=""> llvm/trunk/test/CodeGen/X86/v<wbr class="">ec_int_to_fp.ll<br class=""> llvm/trunk/test/CodeGen/X86/v<wbr class="">ec_minmax_sint.ll<br class=""> llvm/trunk/test/CodeGen/X86/v<wbr class="">ec_shift4.ll<br class=""> llvm/trunk/test/CodeGen/X86/v<wbr class="">ector-blend.ll<br class=""> llvm/trunk/test/CodeGen/X86/v<wbr class="">ector-idiv-sdiv-128.ll<br class=""> llvm/trunk/test/CodeGen/X86/v<wbr class="">ector-idiv-udiv-128.ll<br class=""> llvm/trunk/test/CodeGen/X86/v<wbr class="">ector-mul.ll<br class=""> llvm/trunk/test/CodeGen/X86/v<wbr class="">ector-rotate-128.ll<br class=""> llvm/trunk/test/CodeGen/X86/v<wbr class="">ector-sext.ll<br class=""> llvm/trunk/test/CodeGen/X86/v<wbr class="">ector-shift-ashr-128.ll<br class=""> llvm/trunk/test/CodeGen/X86/v<wbr class="">ector-shift-lshr-128.ll<br class=""> llvm/trunk/test/CodeGen/X86/v<wbr class="">ector-shift-shl-128.ll<br class=""> llvm/trunk/test/CodeGen/X86/v<wbr class="">ector-shuffle-combining.ll<br class=""> llvm/trunk/test/CodeGen/X86/v<wbr class="">ector-trunc-math.ll<br class=""> llvm/trunk/test/CodeGen/X86/v<wbr class="">ector-trunc-packus.ll<br class=""> llvm/trunk/test/CodeGen/X86/v<wbr class="">ector-trunc-ssat.ll<br class=""> llvm/trunk/test/CodeGen/X86/v<wbr class="">ector-trunc-usat.ll<br class=""> llvm/trunk/test/CodeGen/X86/v<wbr class="">ector-zext.ll<br class=""> llvm/trunk/test/CodeGen/X86/v<wbr class="">select-minmax.ll<br class=""> llvm/trunk/test/CodeGen/X86/w<wbr class="">iden_conv-3.ll<br class=""> llvm/trunk/test/CodeGen/X86/w<wbr class="">iden_conv-4.ll<br class=""> llvm/trunk/test/CodeGen/X86/w<wbr class="">in64_frame.ll<br class=""> llvm/trunk/test/CodeGen/X86/x<wbr class="">86-interleaved-access.ll<br class=""> llvm/trunk/test/CodeGen/X86/x<wbr class="">86-shrink-wrap-unwind.ll<br class=""> llvm/trunk/test/CodeGen/X86/x<wbr class="">86-shrink-wrapping.ll<br class=""> llvm/trunk/test/DebugInfo/COF<wbr class="">F/fpo-shrink-wrap.ll<br class=""> llvm/trunk/test/DebugInfo/X86<wbr class="">/spill-nospill.ll<br class=""><br class=""><D41835.132429.patch>_________<wbr class="">______________________________<wbr class="">________<br class="">llvm-commits mailing list<br class=""><a href="mailto:llvm-commits@lists.llvm.org" target="_blank" class=""><span style="color:purple" class="">llvm-commits@lists.llvm.org</span></a><br class=""><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" target="_blank" class=""><span style="color:purple" class="">http://lists.llvm.org/cgi-bin/<wbr class="">mailman/listinfo/llvm-commits</span></a><u class=""></u><u class=""></u></p></div></div></div></blockquote></div></div></div></div></div></blockquote></div><p class="MsoNormal"><u class=""></u> <u class=""></u></p></div></div></div></blockquote></div><p class="MsoNormal"><u class=""></u> <u class=""></u></p></div></div></div></div></blockquote></div><br class=""></div>
</div></blockquote></div><br class=""></div></div></div></div></blockquote></div><br class=""></div>
</div></blockquote></div><br class=""></div></body></html>