[llvm] r303396 - LiveIntervalAnalysis: Fix missing case in pruneSubRegValues()

Matthias Braun via llvm-commits llvm-commits at lists.llvm.org
Fri May 19 10:39:00 PDT 2017


Indeed, thanks.

> On May 19, 2017, at 5:43 AM, Volkan Keles <vkeles at apple.com> wrote:
> 
> Hi Matthias,
> 
> There is a typo in the test. Could you check my comment below?
> 
>> On May 19, 2017, at 1:18 AM, Matthias Braun via llvm-commits <llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>> wrote:
>> 
>> Author: matze
>> Date: Thu May 18 19:18:03 2017
>> New Revision: 303396
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=303396&view=rev <http://llvm.org/viewvc/llvm-project?rev=303396&view=rev>
>> Log:
>> LiveIntervalAnalysis: Fix missing case in pruneSubRegValues()
>> 
>> pruneSubRegValues() needs to remove subregister ranges starting at
>> instructions that later get removed by eraseInstrs(). It missed to check
>> one case in which eraseInstrs() would remove an instruction.
>> 
>> Fixes http://llvm.org/PR32688 <http://llvm.org/PR32688>
>> 
>> Added:
>>    llvm/trunk/test/CodeGen/AMDGPU/regcoalesce-prune.mir
>> Modified:
>>    llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp
>> 
>> Modified: llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp?rev=303396&r1=303395&r2=303396&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp?rev=303396&r1=303395&r2=303396&view=diff>
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp Thu May 18 19:18:03 2017
>> @@ -2666,11 +2666,17 @@ void JoinVals::pruneSubRegValues(LiveInt
>>   // Look for values being erased.
>>   bool DidPrune = false;
>>   for (unsigned i = 0, e = LR.getNumValNums(); i != e; ++i) {
>> -    if (Vals[i].Resolution != CR_Erase)
>> +    // We should trigger in all cases in which eraseInstrs() does something.
>> +    // match what eraseInstrs() is doing, print a message so
>> +    if (Vals[i].Resolution != CR_Erase &&
>> +        (Vals[i].Resolution != CR_Keep || !Vals[i].ErasableImplicitDef ||
>> +         !Vals[i].Pruned))
>>       continue;
>> 
>>     // Check subranges at the point where the copy will be removed.
>>     SlotIndex Def = LR.getValNumInfo(i)->def;
>> +    // Print message so mismatches with eraseInstrs() can be diagnosed.
>> +    DEBUG(dbgs() << "\t\tExpecting instruction removal at " << Def << '\n');
>>     for (LiveInterval::SubRange &S : LI.subranges()) {
>>       LiveQueryResult Q = S.Query(Def);
>> 
>> 
>> Added: llvm/trunk/test/CodeGen/AMDGPU/regcoalesce-prune.mir
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/regcoalesce-prune.mir?rev=303396&view=auto <http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/regcoalesce-prune.mir?rev=303396&view=auto>
>> ==============================================================================
>> --- llvm/trunk/test/CodeGen/AMDGPU/regcoalesce-prune.mir (added)
>> +++ llvm/trunk/test/CodeGen/AMDGPU/regcoalesce-prune.mir Thu May 18 19:18:03 2017
>> @@ -0,0 +1,31 @@
>> +# RUN: llc -o - %s -mtriple=amdgcn-amd-amdhsa-opencl -run-pass=simple-register-coalescing | FileCheck %s
>> +---
>> +# Checks for a bug where subregister liveranges were not properly pruned for
>> +# an IMPLCITI_DEF that gets removed completely.
>> +#
>> +# CHECK-LABEL: name: func
>> +# IMPLICIT_DEF should be gone without llc hitting assertion failures.
>> +# CHECK-NOT: IMPLCITI_DEF
> 
> IMPLCITI_DEF —> IMPLICIT_DEF
> 
>> +name: func
>> +tracksRegLiveness: true
>> +body: |
>> +  bb.0:
>> +    undef %5.sub1 = V_MOV_B32_e32 0, implicit %exec
>> +    %6 = COPY %5
>> +    S_CBRANCH_VCCZ %bb.2, implicit undef %vcc
>> +
>> +  bb.1:
>> +    %1 : sreg_32_xm0 = S_MOV_B32 0
>> +    undef %0.sub0 : sreg_64 = COPY %1
>> +    %0.sub1 = COPY %1
>> +    %4 : vreg_64 = COPY killed %0
>> +    %5 : vreg_64 = IMPLICIT_DEF
>> +    %6 : vreg_64 = COPY killed %4
>> +
>> +  bb.2:
>> +    %2 : vgpr_32 = V_CVT_F32_I32_e32 killed %5.sub1, implicit %exec
>> +
>> +  bb.3:
>> +    %3 : vgpr_32 = V_CVT_F32_I32_e32 killed %6.sub1, implicit %exec
>> +    S_ENDPGM
>> +...
>> 
>> 
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits>
> 
> Thanks,
> Volkan

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170519/6141ed71/attachment.html>


More information about the llvm-commits mailing list