[llvm] r241027 - RegisterCoalescer: Cleanup empty subranges after shrinkToUses()

Quentin Colombet qcolombet at apple.com
Wed Jul 1 15:12:27 PDT 2015


Hi Matthias,

Is there a way we can do that as part of shrinkToUses?
My concern is that future users of that API may have similar problems and would need a similar fix.

Also, could you check that we generate something meaningful, not just don’t crash (I know we already have this discussion, I still don’t like test case with FileCheck :)).

Thanks,
-Quentin

> On Jun 29, 2015, at 5:33 PM, Matthias Braun <matze at braunis.de> wrote:
> 
> Author: matze
> Date: Mon Jun 29 19:33:44 2015
> New Revision: 241027
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=241027&view=rev
> Log:
> RegisterCoalescer: Cleanup empty subranges after shrinkToUses()
> 
> A call to removeEmptySubranges() is necessary after every operation that
> potentially removes all segments from a subregister range; this case in
> the register coalescer was missing.
> 
> Added:
>    llvm/trunk/test/CodeGen/AMDGPU/subreg-coalescer-undef-use.ll
> 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=241027&r1=241026&r2=241027&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp (original)
> +++ llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp Mon Jun 29 19:33:44 2015
> @@ -1449,6 +1449,7 @@ bool RegisterCoalescer::joinCopy(Machine
>                    << format("%04X", S.LaneMask) << ")\n");
>       LIS->shrinkToUses(S, LI.reg);
>     }
> +    LI.removeEmptySubRanges();
>   }
>   if (ShrinkMainRange) {
>     LiveInterval &LI = LIS->getInterval(CP.getDstReg());
> 
> Added: llvm/trunk/test/CodeGen/AMDGPU/subreg-coalescer-undef-use.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/subreg-coalescer-undef-use.ll?rev=241027&view=auto
> ==============================================================================
> --- llvm/trunk/test/CodeGen/AMDGPU/subreg-coalescer-undef-use.ll (added)
> +++ llvm/trunk/test/CodeGen/AMDGPU/subreg-coalescer-undef-use.ll Mon Jun 29 19:33:44 2015
> @@ -0,0 +1,20 @@
> +; RUN: llc -march=amdgcn -mcpu=SI -o /dev/null %s
> +; Don't crash when the use of an undefined value is only detected by the
> +; register coalescer because it is hidden with subregister insert/extract.
> +target triple="amdgcn--"
> +
> +define void @foobar(float %a0, float %a1, float addrspace(1)* %out) nounwind {
> +entry:
> +  %v0 = insertelement <4 x float> undef, float %a0, i32 0
> +  br i1 undef, label %ift, label %ife
> +
> +ift:
> +  %v1 = insertelement <4 x float> undef, float %a1, i32 0
> +  br label %ife
> +
> +ife:
> +  %val = phi <4 x float> [ %v1, %ift ], [ %v0, %entry ]
> +  %v2 = extractelement <4 x float> %val, i32 1
> +  store float %v2, float addrspace(1)* %out, align 4
> +  ret void
> +}
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits





More information about the llvm-commits mailing list