[llvm] r303396 - LiveIntervalAnalysis: Fix missing case in pruneSubRegValues()
Volkan Keles via llvm-commits
llvm-commits at lists.llvm.org
Fri May 19 05:43:47 PDT 2017
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> 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
> 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
>
> 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
> ==============================================================================
> --- 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
> ==============================================================================
> --- 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
> 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/d1186857/attachment.html>
More information about the llvm-commits
mailing list