[llvm-commits] [llvm] r164807 - /llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp

David Peixotto dpeixott at codeaurora.org
Tue Oct 2 14:07:01 PDT 2012


I'm seeing a new failure after this commit. I've produced a small test case
and reported the failure as http://llvm.org/bugs/show_bug.cgi?id=13999.

I'm not too familiar with the register allocator. Any chance someone could
take a look at this or provide some guidance?

Thanks,
David

-- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted
by The Linux Foundation


> -----Original Message-----
> From: llvm-commits-bounces at cs.uiuc.edu [mailto:llvm-commits-
> bounces at cs.uiuc.edu] On Behalf Of Jakob Stoklund Olesen
> Sent: Thursday, September 27, 2012 4:32 PM
> To: llvm-commits at cs.uiuc.edu
> Subject: [llvm-commits] [llvm] r164807 -
> /llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp
> 
> Author: stoklund
> Date: Thu Sep 27 18:31:32 2012
> New Revision: 164807
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=164807&view=rev
> Log:
> Remove <def,read-undef> flags from partial redefinitions.
> 
> The new coalescer can turn a full virtual register definition into a
partial redef
> by merging another value into an unused vector lane.
> 
> Make sure to clear the <read-undef> flag on such defs.
> 
> 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=164807&r1=164
> 806&r2=164807&view=diff
> ==========================================================
> ====================
> --- llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp (original)
> +++ llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp Thu Sep 27 18:31:32
> +++ 2012
> @@ -1732,6 +1732,12 @@
>      case CR_Replace:
>        // This value takes precedence over the value in Other.LI.
>        LIS->pruneValue(&Other.LI, Def, &EndPoints);
> +      // Remove <def,read-undef> flags. This def is now a partial redef.
> +      if (!Def.isBlock())
> +        for (MIOperands MO(Indexes->getInstructionFromIndex(Def));
> +             MO.isValid(); ++MO)
> +          if (MO->isReg() && MO->isDef() && MO->getReg() == LI.reg)
> +            MO->setIsUndef(false);
>        DEBUG(dbgs() << "\t\tpruned " << PrintReg(Other.LI.reg) << " at "
<< Def
>                     << ": " << Other.LI << '\n');
>        break;
> 
> 
> _______________________________________________
> 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