<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hi Chris,<div class=""><br class=""></div><div class="">Is there a way to check what is on the buildslave?</div><div class=""><br class=""></div><div class="">It looks as if it did not updated the header file.</div><div class=""><br class=""></div><div class="">Cheers,</div><div class="">-Quentin<br class=""><div><blockquote type="cite" class=""><div class="">On Jul 9, 2016, at 11:24 PM, Lang Hames <<a href="mailto:lhames@gmail.com" class="">lhames@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Hi Wei,<div class=""><br class=""></div><div class="">I am still seeing failures on the buildbots: <a href="http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA-incremental_build/" class="">http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA-incremental_build/</a> , but you're right the code looks ok to me. Quentin, Chris - could this be a builder config issue?</div><div class=""><br class=""></div><div class="">- Lang.</div><div class=""><br class=""></div><div class=""><br class=""></div></div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Sat, Jul 9, 2016 at 11:05 AM, Wei Mi <span dir="ltr" class=""><<a href="mailto:wmi@google.com" target="_blank" class="">wmi@google.com</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Lang,<br class="">
<br class="">
Sorry, I am little confused. I check the program and cannot see any<br class="">
discrepancy reported in the error log, and I also cannot reproduce the<br class="">
error in clang bootstrap build. Is it anything related with<br class="">
incremental build?<br class="">
<br class="">
Thanks,<br class="">
Wei.<br class="">
<div class="HOEnZb"><div class="h5"><br class="">
On Sat, Jul 9, 2016 at 9:28 AM, Wei Mi <<a href="mailto:wmi@google.com" class="">wmi@google.com</a>> wrote:<br class="">
> Sorry, I will fix it.<br class="">
><br class="">
> Thanks,<br class="">
> Wei.<br class="">
><br class="">
> On Sat, Jul 9, 2016 at 9:03 AM, Lang Hames <<a href="mailto:lhames@gmail.com" class="">lhames@gmail.com</a>> wrote:<br class="">
>> Hi Wei,<br class="">
>><br class="">
>> This appears to have broken the bots:<br class="">
>> <a href="http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA-incremental_build/27331/" rel="noreferrer" target="_blank" class="">http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA-incremental_build/27331/</a><br class="">
>><br class="">
>> Could you please fix or revert?<br class="">
>><br class="">
>> Cheers,<br class="">
>> Lang.<br class="">
>><br class="">
>><br class="">
>> On Fri, Jul 8, 2016 at 2:08 PM, Wei Mi via llvm-commits<br class="">
>> <<a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a>> wrote:<br class="">
>>><br class="">
>>> Author: wmi<br class="">
>>> Date: Fri Jul  8 16:08:09 2016<br class="">
>>> New Revision: 274928<br class="">
>>><br class="">
>>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=274928&view=rev" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project?rev=274928&view=rev</a><br class="">
>>> Log:<br class="">
>>> Allow dead insts to be kept in DeadRemat only when they are<br class="">
>>> rematerializable.<br class="">
>>><br class="">
>>> Because isReallyTriviallyReMaterializableGeneric puts many limits on<br class="">
>>> rematerializable instructions, this fix can prevent instructions with<br class="">
>>> tied virtual operands and instructions with virtual register uses from<br class="">
>>> being kept in DeadRemat, so as to workaround the live interval consistency<br class="">
>>> problem for the dummy instructions kept in DeadRemat.<br class="">
>>><br class="">
>>> But we still need to fix the live interval consistency problem. This patch<br class="">
>>> is just a short time relieve. PR28464 has been filed as a reminder.<br class="">
>>><br class="">
>>> Differential Revision: <a href="http://reviews.llvm.org/D19486" rel="noreferrer" target="_blank" class="">http://reviews.llvm.org/D19486</a><br class="">
>>><br class="">
>>> Modified:<br class="">
>>>     llvm/trunk/include/llvm/CodeGen/LiveRangeEdit.h<br class="">
>>>     llvm/trunk/lib/CodeGen/InlineSpiller.cpp<br class="">
>>>     llvm/trunk/lib/CodeGen/LiveRangeEdit.cpp<br class="">
>>>     llvm/trunk/lib/CodeGen/RegAllocGreedy.cpp<br class="">
>>>     llvm/trunk/lib/CodeGen/SplitKit.cpp<br class="">
>>>     llvm/trunk/lib/CodeGen/SplitKit.h<br class="">
>>><br class="">
>>> Modified: llvm/trunk/include/llvm/CodeGen/LiveRangeEdit.h<br class="">
>>> URL:<br class="">
>>> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveRangeEdit.h?rev=274928&r1=274927&r2=274928&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/LiveRangeEdit.h?rev=274928&r1=274927&r2=274928&view=diff</a><br class="">
>>><br class="">
>>> ==============================================================================<br class="">
>>> --- llvm/trunk/include/llvm/CodeGen/LiveRangeEdit.h (original)<br class="">
>>> +++ llvm/trunk/include/llvm/CodeGen/LiveRangeEdit.h Fri Jul  8 16:08:09<br class="">
>>> 2016<br class="">
>>> @@ -100,7 +100,8 @@ private:<br class="">
>>>                      SmallVector<LiveInterval*, 8>,<br class="">
>>>                      SmallPtrSet<LiveInterval*, 8> > ToShrinkSet;<br class="">
>>>    /// Helper for eliminateDeadDefs.<br class="">
>>> -  void eliminateDeadDef(MachineInstr *MI, ToShrinkSet &ToShrink);<br class="">
>>> +  void eliminateDeadDef(MachineInstr *MI, ToShrinkSet &ToShrink,<br class="">
>>> +                        AliasAnalysis *AA);<br class="">
>>><br class="">
>>>    /// MachineRegisterInfo callback to notify when new virtual<br class="">
>>>    /// registers are created.<br class="">
>>> @@ -242,7 +243,8 @@ public:<br class="">
>>>    /// allocator.  These registers should not be split into new intervals<br class="">
>>>    /// as currently those new intervals are not guaranteed to spill.<br class="">
>>>    void eliminateDeadDefs(SmallVectorImpl<MachineInstr *> &Dead,<br class="">
>>> -                         ArrayRef<unsigned> RegsBeingSpilled = None);<br class="">
>>> +                         ArrayRef<unsigned> RegsBeingSpilled = None,<br class="">
>>> +                         AliasAnalysis *AA = nullptr);<br class="">
>>><br class="">
>>>    /// calculateRegClassAndHint - Recompute register class and hint for<br class="">
>>> each new<br class="">
>>>    /// register.<br class="">
>>><br class="">
>>> Modified: llvm/trunk/lib/CodeGen/InlineSpiller.cpp<br class="">
>>> URL:<br class="">
>>> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/InlineSpiller.cpp?rev=274928&r1=274927&r2=274928&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/InlineSpiller.cpp?rev=274928&r1=274927&r2=274928&view=diff</a><br class="">
>>><br class="">
>>> ==============================================================================<br class="">
>>> --- llvm/trunk/lib/CodeGen/InlineSpiller.cpp (original)<br class="">
>>> +++ llvm/trunk/lib/CodeGen/InlineSpiller.cpp Fri Jul  8 16:08:09 2016<br class="">
>>> @@ -626,7 +626,7 @@ void InlineSpiller::reMaterializeAll() {<br class="">
>>>    if (DeadDefs.empty())<br class="">
>>>      return;<br class="">
>>>    DEBUG(dbgs() << "Remat created " << DeadDefs.size() << " dead<br class="">
>>> defs.\n");<br class="">
>>> -  Edit->eliminateDeadDefs(DeadDefs, RegsToSpill);<br class="">
>>> +  Edit->eliminateDeadDefs(DeadDefs, RegsToSpill, AA);<br class="">
>>><br class="">
>>>    // LiveRangeEdit::eliminateDeadDef is used to remove dead define<br class="">
>>> instructions<br class="">
>>>    // after rematerialization.  To remove a VNI for a vreg from its<br class="">
>>> LiveInterval,<br class="">
>>> @@ -996,7 +996,7 @@ void InlineSpiller::spillAll() {<br class="">
>>>    // Hoisted spills may cause dead code.<br class="">
>>>    if (!DeadDefs.empty()) {<br class="">
>>>      DEBUG(dbgs() << "Eliminating " << DeadDefs.size() << " dead defs\n");<br class="">
>>> -    Edit->eliminateDeadDefs(DeadDefs, RegsToSpill);<br class="">
>>> +    Edit->eliminateDeadDefs(DeadDefs, RegsToSpill, AA);<br class="">
>>>    }<br class="">
>>><br class="">
>>>    // Finally delete the SnippetCopies.<br class="">
>>> @@ -1440,7 +1440,7 @@ void HoistSpillHelper::hoistAllSpills()<br class="">
>>>            RMEnt->RemoveOperand(i - 1);<br class="">
>>>        }<br class="">
>>>      }<br class="">
>>> -    Edit.eliminateDeadDefs(SpillsToRm, None);<br class="">
>>> +    Edit.eliminateDeadDefs(SpillsToRm, None, AA);<br class="">
>>>    }<br class="">
>>>  }<br class="">
>>><br class="">
>>><br class="">
>>> Modified: llvm/trunk/lib/CodeGen/LiveRangeEdit.cpp<br class="">
>>> URL:<br class="">
>>> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveRangeEdit.cpp?rev=274928&r1=274927&r2=274928&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/LiveRangeEdit.cpp?rev=274928&r1=274927&r2=274928&view=diff</a><br class="">
>>><br class="">
>>> ==============================================================================<br class="">
>>> --- llvm/trunk/lib/CodeGen/LiveRangeEdit.cpp (original)<br class="">
>>> +++ llvm/trunk/lib/CodeGen/LiveRangeEdit.cpp Fri Jul  8 16:08:09 2016<br class="">
>>> @@ -234,7 +234,8 @@ bool LiveRangeEdit::useIsKill(const Live<br class="">
>>>  }<br class="">
>>><br class="">
>>>  /// Find all live intervals that need to shrink, then remove the<br class="">
>>> instruction.<br class="">
>>> -void LiveRangeEdit::eliminateDeadDef(MachineInstr *MI, ToShrinkSet<br class="">
>>> &ToShrink) {<br class="">
>>> +void LiveRangeEdit::eliminateDeadDef(MachineInstr *MI, ToShrinkSet<br class="">
>>> &ToShrink,<br class="">
>>> +                                     AliasAnalysis *AA) {<br class="">
>>>    assert(MI->allDefsAreDead() && "Def isn't really dead");<br class="">
>>>    SlotIndex Idx = LIS.getInstructionIndex(*MI).getRegSlot();<br class="">
>>><br class="">
>>> @@ -327,11 +328,12 @@ void LiveRangeEdit::eliminateDeadDef(Mac<br class="">
>>>      }<br class="">
>>>      DEBUG(dbgs() << "Converted physregs to:\t" << *MI);<br class="">
>>>    } else {<br class="">
>>> -    // If the dest of MI is an original reg, don't delete the inst.<br class="">
>>> Replace<br class="">
>>> -    // the dest with a new reg, keep the inst for remat of other<br class="">
>>> siblings.<br class="">
>>> -    // The inst is saved in LiveRangeEdit::DeadRemats and will be deleted<br class="">
>>> -    // after all the allocations of the func are done.<br class="">
>>> -    if (isOrigDef) {<br class="">
>>> +    // If the dest of MI is an original reg and MI is reMaterializable,<br class="">
>>> +    // don't delete the inst. Replace the dest with a new reg, and keep<br class="">
>>> +    // the inst for remat of other siblings. The inst is saved in<br class="">
>>> +    // LiveRangeEdit::DeadRemats and will be deleted after all the<br class="">
>>> +    // allocations of the func are done.<br class="">
>>> +    if (isOrigDef && DeadRemats && TII.isTriviallyReMaterializable(*MI,<br class="">
>>> AA)) {<br class="">
>>>        LiveInterval &NewLI = createEmptyIntervalFrom(Dest);<br class="">
>>>        VNInfo *VNI = NewLI.getNextValue(Idx, LIS.getVNInfoAllocator());<br class="">
>>>        NewLI.addSegment(LiveInterval::Segment(Idx, Idx.getDeadSlot(),<br class="">
>>> VNI));<br class="">
>>> @@ -361,13 +363,14 @@ void LiveRangeEdit::eliminateDeadDef(Mac<br class="">
>>>  }<br class="">
>>><br class="">
>>>  void LiveRangeEdit::eliminateDeadDefs(SmallVectorImpl<MachineInstr *><br class="">
>>> &Dead,<br class="">
>>> -                                      ArrayRef<unsigned><br class="">
>>> RegsBeingSpilled) {<br class="">
>>> +                                      ArrayRef<unsigned><br class="">
>>> RegsBeingSpilled,<br class="">
>>> +                                      AliasAnalysis *AA) {<br class="">
>>>    ToShrinkSet ToShrink;<br class="">
>>><br class="">
>>>    for (;;) {<br class="">
>>>      // Erase all dead defs.<br class="">
>>>      while (!Dead.empty())<br class="">
>>> -      eliminateDeadDef(Dead.pop_back_val(), ToShrink);<br class="">
>>> +      eliminateDeadDef(Dead.pop_back_val(), ToShrink, AA);<br class="">
>>><br class="">
>>>      if (ToShrink.empty())<br class="">
>>>        break;<br class="">
>>><br class="">
>>> Modified: llvm/trunk/lib/CodeGen/RegAllocGreedy.cpp<br class="">
>>> URL:<br class="">
>>> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/RegAllocGreedy.cpp?rev=274928&r1=274927&r2=274928&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/RegAllocGreedy.cpp?rev=274928&r1=274927&r2=274928&view=diff</a><br class="">
>>><br class="">
>>> ==============================================================================<br class="">
>>> --- llvm/trunk/lib/CodeGen/RegAllocGreedy.cpp (original)<br class="">
>>> +++ llvm/trunk/lib/CodeGen/RegAllocGreedy.cpp Fri Jul  8 16:08:09 2016<br class="">
>>> @@ -129,6 +129,7 @@ class RAGreedy : public MachineFunctionP<br class="">
>>>    EdgeBundles *Bundles;<br class="">
>>>    SpillPlacement *SpillPlacer;<br class="">
>>>    LiveDebugVariables *DebugVars;<br class="">
>>> +  AliasAnalysis *AA;<br class="">
>>><br class="">
>>>    // state<br class="">
>>>    std::unique_ptr<Spiller> SpillerInstance;<br class="">
>>> @@ -2592,6 +2593,7 @@ bool RAGreedy::runOnMachineFunction(Mach<br class="">
>>>    Bundles = &getAnalysis<EdgeBundles>();<br class="">
>>>    SpillPlacer = &getAnalysis<SpillPlacement>();<br class="">
>>>    DebugVars = &getAnalysis<LiveDebugVariables>();<br class="">
>>> +  AA = &getAnalysis<AAResultsWrapperPass>().getAAResults();<br class="">
>>><br class="">
>>>    initializeCSRCost();<br class="">
>>><br class="">
>>> @@ -2600,7 +2602,7 @@ bool RAGreedy::runOnMachineFunction(Mach<br class="">
>>>    DEBUG(LIS->dump());<br class="">
>>><br class="">
>>>    SA.reset(new SplitAnalysis(*VRM, *LIS, *Loops));<br class="">
>>> -  SE.reset(new SplitEditor(*SA, *LIS, *VRM, *DomTree, *MBFI));<br class="">
>>> +  SE.reset(new SplitEditor(*SA, *AA, *LIS, *VRM, *DomTree, *MBFI));<br class="">
>>>    ExtraRegInfo.clear();<br class="">
>>>    ExtraRegInfo.resize(MRI->getNumVirtRegs());<br class="">
>>>    NextCascade = 1;<br class="">
>>><br class="">
>>> Modified: llvm/trunk/lib/CodeGen/SplitKit.cpp<br class="">
>>> URL:<br class="">
>>> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SplitKit.cpp?rev=274928&r1=274927&r2=274928&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SplitKit.cpp?rev=274928&r1=274927&r2=274928&view=diff</a><br class="">
>>><br class="">
>>> ==============================================================================<br class="">
>>> --- llvm/trunk/lib/CodeGen/SplitKit.cpp (original)<br class="">
>>> +++ llvm/trunk/lib/CodeGen/SplitKit.cpp Fri Jul  8 16:08:09 2016<br class="">
>>> @@ -338,11 +338,13 @@ void SplitAnalysis::analyze(const LiveIn<br class="">
>>><br class="">
>>> //===----------------------------------------------------------------------===//<br class="">
>>><br class="">
>>>  /// Create a new SplitEditor for editing the LiveInterval analyzed by SA.<br class="">
>>> -SplitEditor::SplitEditor(SplitAnalysis &sa, LiveIntervals &lis,<br class="">
>>> VirtRegMap &vrm,<br class="">
>>> +SplitEditor::SplitEditor(SplitAnalysis &sa, AliasAnalysis &aa,<br class="">
>>> +                         LiveIntervals &lis, VirtRegMap &vrm,<br class="">
>>>                           MachineDominatorTree &mdt,<br class="">
>>>                           MachineBlockFrequencyInfo &mbfi)<br class="">
>>> -    : SA(sa), LIS(lis), VRM(vrm),<br class="">
>>> MRI(vrm.getMachineFunction().getRegInfo()),<br class="">
>>> -      MDT(mdt),<br class="">
>>> TII(*vrm.getMachineFunction().getSubtarget().getInstrInfo()),<br class="">
>>> +    : SA(sa), AA(aa), LIS(lis), VRM(vrm),<br class="">
>>> +      MRI(vrm.getMachineFunction().getRegInfo()), MDT(mdt),<br class="">
>>> +      TII(*vrm.getMachineFunction().getSubtarget().getInstrInfo()),<br class="">
>>>        TRI(*vrm.getMachineFunction().getSubtarget().getRegisterInfo()),<br class="">
>>>        MBFI(mbfi), Edit(nullptr), OpenIdx(0), SpillMode(SM_Partition),<br class="">
>>>        RegAssign(Allocator) {}<br class="">
>>> @@ -1130,7 +1132,7 @@ void SplitEditor::deleteRematVictims() {<br class="">
>>>    if (Dead.empty())<br class="">
>>>      return;<br class="">
>>><br class="">
>>> -  Edit->eliminateDeadDefs(Dead);<br class="">
>>> +  Edit->eliminateDeadDefs(Dead, None, &AA);<br class="">
>>>  }<br class="">
>>><br class="">
>>>  void SplitEditor::finish(SmallVectorImpl<unsigned> *LRMap) {<br class="">
>>><br class="">
>>> Modified: llvm/trunk/lib/CodeGen/SplitKit.h<br class="">
>>> URL:<br class="">
>>> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SplitKit.h?rev=274928&r1=274927&r2=274928&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SplitKit.h?rev=274928&r1=274927&r2=274928&view=diff</a><br class="">
>>><br class="">
>>> ==============================================================================<br class="">
>>> --- llvm/trunk/lib/CodeGen/SplitKit.h (original)<br class="">
>>> +++ llvm/trunk/lib/CodeGen/SplitKit.h Fri Jul  8 16:08:09 2016<br class="">
>>> @@ -235,6 +235,7 @@ public:<br class="">
>>>  ///<br class="">
>>>  class LLVM_LIBRARY_VISIBILITY SplitEditor {<br class="">
>>>    SplitAnalysis &SA;<br class="">
>>> +  AliasAnalysis &AA;<br class="">
>>>    LiveIntervals &LIS;<br class="">
>>>    VirtRegMap &VRM;<br class="">
>>>    MachineRegisterInfo &MRI;<br class="">
>>> @@ -380,8 +381,9 @@ private:<br class="">
>>>  public:<br class="">
>>>    /// Create a new SplitEditor for editing the LiveInterval analyzed by<br class="">
>>> SA.<br class="">
>>>    /// Newly created intervals will be appended to newIntervals.<br class="">
>>> -  SplitEditor(SplitAnalysis &SA, LiveIntervals&, VirtRegMap&,<br class="">
>>> -              MachineDominatorTree&, MachineBlockFrequencyInfo &);<br class="">
>>> +  SplitEditor(SplitAnalysis &SA, AliasAnalysis &AA, LiveIntervals&,<br class="">
>>> +              VirtRegMap&, MachineDominatorTree&,<br class="">
>>> +              MachineBlockFrequencyInfo &);<br class="">
>>><br class="">
>>>    /// reset - Prepare for a new split.<br class="">
>>>    void reset(LiveRangeEdit&, ComplementSpillMode = SM_Partition);<br class="">
>>><br class="">
>>><br class="">
>>> _______________________________________________<br class="">
>>> llvm-commits mailing list<br class="">
>>> <a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a><br class="">
>>> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br class="">
>><br class="">
>><br class="">
</div></div></blockquote></div><br class=""></div>
</div></blockquote></div><br class=""></div></body></html>