[llvm-commits] [llvm] r153794 - in /llvm/trunk/utils/TableGen: CodeGenRegisters.cpp CodeGenRegisters.h

Andrew Trick atrick at apple.com
Fri Mar 30 19:43:52 PDT 2012


On Mar 30, 2012, at 7:20 PM, Jakob Stoklund Olesen <stoklund at 2pi.dk> wrote:
> 
>> +// Overwrites MergedRU in the process.
>> +static void mergeRegUnits(CodeGenRegister::RegUnitList &MergedRU,
>> +                          const CodeGenRegister::RegUnitList &RRU)
> 
> This function does the same as std::set_union from <algorithm>.

There are other clients of my pretty interface to be checked in soon. But I'm not attached to my implementation--it's nasty. I was trying to avoid doubling the size of the set. It didn't seem right to do that to a SmallVector. But feel free to change.

> 
>> +      // Strangely a register may have itself as a subreg (self-cycle) e.g. XMM.
>> +      CodeGenRegister *SR = I->second;
>> +      if (SR == this) {
>> +        if (RegUnits.empty())
>> +          RegUnits.push_back(RegBank.newRegUnit());
>> +        continue;
>> +      }
> 
> I checked X86RegisterInfo.td, and it turns out we don't actually specify XMM0 as a sub-register of itself. Instead, sub_ss and sub_sd are described as idempotent sub-register indexes.

The subregisters are implicitly added by the "process composites" code. So I needed that ugly case to deal with XMM. Unless we change how getSubRegs work.

-Andy
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20120330/0e00f608/attachment.html>


More information about the llvm-commits mailing list