[llvm] r231979 - Have getCallPreservedMask and getThisCallPreservedMask take a

Eric Christopher echristo at gmail.com
Thu Mar 12 17:31:53 PDT 2015


On Thu, Mar 12, 2015 at 5:20 PM Eric Christopher <echristo at gmail.com> wrote:

> On Thu, Mar 12, 2015 at 5:07 PM Akira Hatanaka <ahatanak at gmail.com> wrote:
>
>> On Wed, Mar 11, 2015 at 3:50 PM, Eric Christopher <echristo at gmail.com>
>> wrote:
>>
>>> In case anyone is wondering what's going on here, the rough idea:
>>>
>>> TargetRegisterInfo depends on MCRegisterInfo which is not, in fact,
>>> subtarget dependent. TargetRegisterInfo is, in general, just a bunch of
>>> layering APIs on top of MCRegisterInfo and nearly all of them already take
>>> a MachineFunction anyhow. Extend this slightly and just have TRI be an API
>>> layer that's subtarget independent and we can move it to the TargetMachine
>>> level. Prompting this is the desire to have the MC layer not be subtarget
>>> dependent as much as possible - and not during configuration if possible.
>>>
>>>
>> If MCRegisterInfo is subtarget independent, meaning you'll always get the
>> same MCRegisterInfo object regardless of what subtarget you have as long as
>> the target is the same, why does moving TargetRegisterInfo
>>
>
> It's not making the MC layer less subtarget dependent, it's how we access
> the MC layer. See things like LLVMTargetMachine.cpp for an illustration.
>
>
>> to TargetMachine make the MC layer less subtarget dependent?  Also, this
>> will make it impossible for targets to have different subclasses of
>> TargetRegisterInfo, which might make the design less clean.
>>
>>
> This is trivial to fix, you can see what I've been doing there.
>
>
>> Perhaps I'm just not understanding your long term plan to fix the MC
>> layer. Could you elaborate?
>>
>
> It's not a fix for the MC layer it's a fix for the layer above it.
> Basically right now TRI has an is-a relationship with MCRegisterInfo - it
> should have a has-a relationship as should anything that determines overall
> module layout. The rest of asm info depends on MCRegisterInfo and so I'm
> moving this up because it's relatively simple to do and fixes the problem
> without having to change the TRI->MRI relationship.
>
>
To be clear here I'm not saying that this is the only way forward. Other
options involve having the TargetMachine own a particular set of MC level
bits that involve module writing and separate that out from the various
subtarget specific things that asm and mcinst printing need at the function
level. (Yes, sadly these things are different because of various annoyances
with instruction encoding and subtargets).

All of LLVMTargetMachine::addPassesToEmitFile are going to need to change
ultimately.

-eric


> -eric
>
>
>>
>> -eric
>>>
>>> On Wed, Mar 11, 2015 at 3:46 PM Eric Christopher <echristo at gmail.com>
>>> wrote:
>>>
>>>> Author: echristo
>>>> Date: Wed Mar 11 17:42:13 2015
>>>> New Revision: 231979
>>>>
>>>> URL: http://llvm.org/viewvc/llvm-project?rev=231979&view=rev
>>>> Log:
>>>> Have getCallPreservedMask and getThisCallPreservedMask take a
>>>> MachineFunction argument so that we can grab subtarget specific
>>>> features off of it.
>>>>
>>>> Modified:
>>>>     llvm/trunk/include/llvm/Target/TargetRegisterInfo.h
>>>>     llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp
>>>>     llvm/trunk/lib/Target/AArch64/AArch64FastISel.cpp
>>>>     llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp
>>>>     llvm/trunk/lib/Target/AArch64/AArch64RegisterInfo.cpp
>>>>     llvm/trunk/lib/Target/AArch64/AArch64RegisterInfo.h
>>>>     llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp
>>>>     llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.h
>>>>     llvm/trunk/lib/Target/ARM/ARMFastISel.cpp
>>>>     llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp
>>>>     llvm/trunk/lib/Target/Mips/MipsFastISel.cpp
>>>>     llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp
>>>>     llvm/trunk/lib/Target/Mips/MipsRegisterInfo.cpp
>>>>     llvm/trunk/lib/Target/Mips/MipsRegisterInfo.h
>>>>     llvm/trunk/lib/Target/PowerPC/PPCFastISel.cpp
>>>>     llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp
>>>>     llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.cpp
>>>>     llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.h
>>>>     llvm/trunk/lib/Target/Sparc/SparcISelLowering.cpp
>>>>     llvm/trunk/lib/Target/Sparc/SparcRegisterInfo.cpp
>>>>     llvm/trunk/lib/Target/Sparc/SparcRegisterInfo.h
>>>>     llvm/trunk/lib/Target/SystemZ/SystemZISelLowering.cpp
>>>>     llvm/trunk/lib/Target/SystemZ/SystemZRegisterInfo.cpp
>>>>     llvm/trunk/lib/Target/SystemZ/SystemZRegisterInfo.h
>>>>     llvm/trunk/lib/Target/X86/X86FastISel.cpp
>>>>     llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
>>>>     llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
>>>>     llvm/trunk/lib/Target/X86/X86RegisterInfo.h
>>>>
>>>> Modified: llvm/trunk/include/llvm/Target/TargetRegisterInfo.h
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/
>>>> Target/TargetRegisterInfo.h?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/include/llvm/Target/TargetRegisterInfo.h (original)
>>>> +++ llvm/trunk/include/llvm/Target/TargetRegisterInfo.h Wed Mar 11
>>>> 17:42:13 2015
>>>> @@ -428,7 +428,7 @@ public:
>>>>    getCalleeSavedRegs(const MachineFunction *MF) const = 0;
>>>>
>>>>    /// getCallPreservedMask - Return a mask of call-preserved registers
>>>> for the
>>>> -  /// given calling convention on the current sub-target.  The mask
>>>> should
>>>> +  /// given calling convention on the current function.  The mask
>>>> should
>>>>    /// include all call-preserved aliases.  This is used by the register
>>>>    /// allocator to determine which registers can be live across a call.
>>>>    ///
>>>> @@ -445,7 +445,8 @@ public:
>>>>    /// instructions should use implicit-def operands to indicate call
>>>> clobbered
>>>>    /// registers.
>>>>    ///
>>>> -  virtual const uint32_t *getCallPreservedMask(CallingConv::ID) const
>>>> {
>>>> +  virtual const uint32_t *getCallPreservedMask(const MachineFunction
>>>> &MF,
>>>> +                                               CallingConv::ID) const {
>>>>      // The default mask clobbers everything.  All targets should
>>>> override.
>>>>      return nullptr;
>>>>    }
>>>>
>>>> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/
>>>> SelectionDAG/FastISel.cpp?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp (original)
>>>> +++ llvm/trunk/lib/CodeGen/SelectionDAG/FastISel.cpp Wed Mar 11
>>>> 17:42:13 2015
>>>> @@ -801,7 +801,8 @@ bool FastISel::selectPatchpoint(const Ca
>>>>      return false;
>>>>
>>>>    // Push the register mask info.
>>>> -  Ops.push_back(MachineOperand::CreateRegMask(TRI.getCallPrese
>>>> rvedMask(CC)));
>>>> +  Ops.push_back(MachineOperand::CreateRegMask(
>>>> +      TRI.getCallPreservedMask(*FuncInfo.MF, CC)));
>>>>
>>>>    // Add scratch registers as implicit def and early clobber.
>>>>    const MCPhysReg *ScratchRegs = TLI.getScratchRegisters(CC);
>>>>
>>>> Modified: llvm/trunk/lib/Target/AArch64/AArch64FastISel.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AA
>>>> rch64/AArch64FastISel.cpp?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/AArch64/AArch64FastISel.cpp (original)
>>>> +++ llvm/trunk/lib/Target/AArch64/AArch64FastISel.cpp Wed Mar 11
>>>> 17:42:13 2015
>>>> @@ -3158,7 +3158,7 @@ bool AArch64FastISel::fastLowerCall(Call
>>>>
>>>>    // Add a register mask with the call-preserved registers.
>>>>    // Proper defs for return values will be added by
>>>> setPhysRegsDeadExcept().
>>>> -  MIB.addRegMask(TRI.getCallPreservedMask(CC));
>>>> +  MIB.addRegMask(TRI.getCallPreservedMask(*FuncInfo.MF, CC));
>>>>
>>>>    CLI.Call = MIB;
>>>>
>>>>
>>>> Modified: llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AA
>>>> rch64/AArch64ISelLowering.cpp?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp (original)
>>>> +++ llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp Wed Mar 11
>>>> 17:42:13 2015
>>>> @@ -2794,13 +2794,13 @@ AArch64TargetLowering::LowerCall(CallLow
>>>>    const AArch64RegisterInfo *TRI = Subtarget->getRegisterInfo();
>>>>    if (IsThisReturn) {
>>>>      // For 'this' returns, use the X0-preserving mask if applicable
>>>> -    Mask = TRI->getThisReturnPreservedMask(CallConv);
>>>> +    Mask = TRI->getThisReturnPreservedMask(MF, CallConv);
>>>>      if (!Mask) {
>>>>        IsThisReturn = false;
>>>> -      Mask = TRI->getCallPreservedMask(CallConv);
>>>> +      Mask = TRI->getCallPreservedMask(MF, CallConv);
>>>>      }
>>>>    } else
>>>> -    Mask = TRI->getCallPreservedMask(CallConv);
>>>> +    Mask = TRI->getCallPreservedMask(MF, CallConv);
>>>>
>>>>    assert(Mask && "Missing call preserved mask for calling convention");
>>>>    Ops.push_back(DAG.getRegisterMask(Mask));
>>>>
>>>> Modified: llvm/trunk/lib/Target/AArch64/AArch64RegisterInfo.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AA
>>>> rch64/AArch64RegisterInfo.cpp?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/AArch64/AArch64RegisterInfo.cpp (original)
>>>> +++ llvm/trunk/lib/Target/AArch64/AArch64RegisterInfo.cpp Wed Mar 11
>>>> 17:42:13 2015
>>>> @@ -55,7 +55,8 @@ AArch64RegisterInfo::getCalleeSavedRegs(
>>>>  }
>>>>
>>>>  const uint32_t *
>>>> -AArch64RegisterInfo::getCallPreservedMask(CallingConv::ID CC) const {
>>>> +AArch64RegisterInfo::getCallPreservedMask(const MachineFunction &MF,
>>>> +                                          CallingConv::ID CC) const {
>>>>    if (CC == CallingConv::GHC)
>>>>      // This is academic becase all GHC calls are (supposed to be) tail
>>>> calls
>>>>      return CSR_AArch64_NoRegs_RegMask;
>>>> @@ -74,7 +75,8 @@ const uint32_t *AArch64RegisterInfo::get
>>>>  }
>>>>
>>>>  const uint32_t *
>>>> -AArch64RegisterInfo::getThisReturnPreservedMask(CallingConv::ID CC)
>>>> const {
>>>> +AArch64RegisterInfo::getThisReturnPreservedMask(const MachineFunction
>>>> &MF,
>>>> +                                                CallingConv::ID CC)
>>>> const {
>>>>    // This should return a register mask that is the same as that
>>>> returned by
>>>>    // getCallPreservedMask but that additionally preserves the register
>>>> used for
>>>>    // the first i64 argument (which must also be the register used to
>>>> return a
>>>>
>>>> Modified: llvm/trunk/lib/Target/AArch64/AArch64RegisterInfo.h
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AA
>>>> rch64/AArch64RegisterInfo.h?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/AArch64/AArch64RegisterInfo.h (original)
>>>> +++ llvm/trunk/lib/Target/AArch64/AArch64RegisterInfo.h Wed Mar 11
>>>> 17:42:13 2015
>>>> @@ -37,7 +37,8 @@ public:
>>>>
>>>>    /// Code Generation virtual methods...
>>>>    const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF) const
>>>> override;
>>>> -  const uint32_t *getCallPreservedMask(CallingConv::ID) const
>>>> override;
>>>> +  const uint32_t *getCallPreservedMask(const MachineFunction &MF,
>>>> +                                       CallingConv::ID) const override;
>>>>
>>>>    unsigned getCSRFirstUseCost() const override {
>>>>      // The cost will be compared against BlockFrequency where entry
>>>> has the
>>>> @@ -58,7 +59,8 @@ public:
>>>>    ///
>>>>    /// Should return NULL in the case that the calling convention does
>>>> not have
>>>>    /// this property
>>>> -  const uint32_t *getThisReturnPreservedMask(CallingConv::ID) const;
>>>> +  const uint32_t *getThisReturnPreservedMask(const MachineFunction
>>>> &MF,
>>>> +                                             CallingConv::ID) const;
>>>>
>>>>    BitVector getReservedRegs(const MachineFunction &MF) const override;
>>>>    const TargetRegisterClass *
>>>>
>>>> Modified: llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AR
>>>> M/ARMBaseRegisterInfo.cpp?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp (original)
>>>> +++ llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp Wed Mar 11
>>>> 17:42:13 2015
>>>> @@ -87,8 +87,9 @@ ARMBaseRegisterInfo::getCalleeSavedRegs(
>>>>    return RegList;
>>>>  }
>>>>
>>>> -const uint32_t*
>>>> -ARMBaseRegisterInfo::getCallPreservedMask(CallingConv::ID CC) const {
>>>> +const uint32_t *
>>>> +ARMBaseRegisterInfo::getCallPreservedMask(const MachineFunction &MF,
>>>> +                                          CallingConv::ID CC) const {
>>>>    if (CC == CallingConv::GHC)
>>>>      // This is academic becase all GHC calls are (supposed to be) tail
>>>> calls
>>>>      return CSR_NoRegs_RegMask;
>>>> @@ -100,8 +101,9 @@ ARMBaseRegisterInfo::getNoPreservedMask(
>>>>    return CSR_NoRegs_RegMask;
>>>>  }
>>>>
>>>> -const uint32_t*
>>>> -ARMBaseRegisterInfo::getThisReturnPreservedMask(CallingConv::ID CC)
>>>> const {
>>>> +const uint32_t *
>>>> +ARMBaseRegisterInfo::getThisReturnPreservedMask(const MachineFunction
>>>> &MF,
>>>> +                                                CallingConv::ID CC)
>>>> const {
>>>>    // This should return a register mask that is the same as that
>>>> returned by
>>>>    // getCallPreservedMask but that additionally preserves the register
>>>> used for
>>>>    // the first i32 argument (which must also be the register used to
>>>> return a
>>>>
>>>> Modified: llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.h
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AR
>>>> M/ARMBaseRegisterInfo.h?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.h (original)
>>>> +++ llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.h Wed Mar 11
>>>> 17:42:13 2015
>>>> @@ -101,7 +101,8 @@ protected:
>>>>  public:
>>>>    /// Code Generation virtual methods...
>>>>    const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF) const
>>>> override;
>>>> -  const uint32_t *getCallPreservedMask(CallingConv::ID) const
>>>> override;
>>>> +  const uint32_t *getCallPreservedMask(const MachineFunction &MF,
>>>> +                                       CallingConv::ID) const override;
>>>>    const uint32_t *getNoPreservedMask() const;
>>>>
>>>>    /// getThisReturnPreservedMask - Returns a call preserved mask
>>>> specific to the
>>>> @@ -112,7 +113,8 @@ public:
>>>>    ///
>>>>    /// Should return NULL in the case that the calling convention does
>>>> not have
>>>>    /// this property
>>>> -  const uint32_t *getThisReturnPreservedMask(CallingConv::ID) const;
>>>> +  const uint32_t *getThisReturnPreservedMask(const MachineFunction
>>>> &MF,
>>>> +                                             CallingConv::ID) const;
>>>>
>>>>    BitVector getReservedRegs(const MachineFunction &MF) const override;
>>>>
>>>>
>>>> Modified: llvm/trunk/lib/Target/ARM/ARMFastISel.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AR
>>>> M/ARMFastISel.cpp?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/ARM/ARMFastISel.cpp (original)
>>>> +++ llvm/trunk/lib/Target/ARM/ARMFastISel.cpp Wed Mar 11 17:42:13 2015
>>>> @@ -2265,7 +2265,7 @@ bool ARMFastISel::ARMEmitLibcall(const I
>>>>
>>>>    // Add a register mask with the call-preserved registers.
>>>>    // Proper defs for return values will be added by
>>>> setPhysRegsDeadExcept().
>>>> -  MIB.addRegMask(TRI.getCallPreservedMask(CC));
>>>> +  MIB.addRegMask(TRI.getCallPreservedMask(*FuncInfo.MF, CC));
>>>>
>>>>    // Finish off the call including any return values.
>>>>    SmallVector<unsigned, 4> UsedRegs;
>>>> @@ -2416,7 +2416,7 @@ bool ARMFastISel::SelectCall(const Instr
>>>>
>>>>    // Add a register mask with the call-preserved registers.
>>>>    // Proper defs for return values will be added by
>>>> setPhysRegsDeadExcept().
>>>> -  MIB.addRegMask(TRI.getCallPreservedMask(CC));
>>>> +  MIB.addRegMask(TRI.getCallPreservedMask(*FuncInfo.MF, CC));
>>>>
>>>>    // Finish off the call including any return values.
>>>>    SmallVector<unsigned, 4> UsedRegs;
>>>>
>>>> Modified: llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AR
>>>> M/ARMISelLowering.cpp?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp (original)
>>>> +++ llvm/trunk/lib/Target/ARM/ARMISelLowering.cpp Wed Mar 11 17:42:13
>>>> 2015
>>>> @@ -1814,16 +1814,16 @@ ARMTargetLowering::LowerCall(TargetLower
>>>>      const ARMBaseRegisterInfo *ARI = Subtarget->getRegisterInfo();
>>>>      if (isThisReturn) {
>>>>        // For 'this' returns, use the R0-preserving mask if applicable
>>>> -      Mask = ARI->getThisReturnPreservedMask(CallConv);
>>>> +      Mask = ARI->getThisReturnPreservedMask(MF, CallConv);
>>>>        if (!Mask) {
>>>>          // Set isThisReturn to false if the calling convention is not
>>>> one that
>>>>          // allows 'returned' to be modeled in this way, so
>>>> LowerCallResult does
>>>>          // not try to pass 'this' straight through
>>>>          isThisReturn = false;
>>>> -        Mask = ARI->getCallPreservedMask(CallConv);
>>>> +        Mask = ARI->getCallPreservedMask(MF, CallConv);
>>>>        }
>>>>      } else
>>>> -      Mask = ARI->getCallPreservedMask(CallConv);
>>>> +      Mask = ARI->getCallPreservedMask(MF, CallConv);
>>>>
>>>>      assert(Mask && "Missing call preserved mask for calling
>>>> convention");
>>>>      Ops.push_back(DAG.getRegisterMask(Mask));
>>>>
>>>> Modified: llvm/trunk/lib/Target/Mips/MipsFastISel.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mi
>>>> ps/MipsFastISel.cpp?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/Mips/MipsFastISel.cpp (original)
>>>> +++ llvm/trunk/lib/Target/Mips/MipsFastISel.cpp Wed Mar 11 17:42:13
>>>> 2015
>>>> @@ -1167,7 +1167,7 @@ bool MipsFastISel::fastLowerCall(CallLow
>>>>
>>>>    // Add a register mask with the call-preserved registers.
>>>>    // Proper defs for return values will be added by
>>>> setPhysRegsDeadExcept().
>>>> -  MIB.addRegMask(TRI.getCallPreservedMask(CC));
>>>> +  MIB.addRegMask(TRI.getCallPreservedMask(*FuncInfo.MF, CC));
>>>>
>>>>    CLI.Call = MIB;
>>>>
>>>>
>>>> Modified: llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mi
>>>> ps/MipsISelLowering.cpp?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp (original)
>>>> +++ llvm/trunk/lib/Target/Mips/MipsISelLowering.cpp Wed Mar 11
>>>> 17:42:13 2015
>>>> @@ -2481,7 +2481,8 @@ getOpndList(SmallVectorImpl<SDValue> &Op
>>>>
>>>>    // Add a register mask operand representing the call-preserved
>>>> registers.
>>>>    const TargetRegisterInfo *TRI = Subtarget.getRegisterInfo();
>>>> -  const uint32_t *Mask = TRI->getCallPreservedMask(CLI.CallConv);
>>>> +  const uint32_t *Mask =
>>>> +      TRI->getCallPreservedMask(CLI.DAG.getMachineFunction(),
>>>> CLI.CallConv);
>>>>    assert(Mask && "Missing call preserved mask for calling convention");
>>>>    if (Subtarget.inMips16HardFloat()) {
>>>>      if (GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode>(CLI.Callee))
>>>> {
>>>>
>>>> Modified: llvm/trunk/lib/Target/Mips/MipsRegisterInfo.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mi
>>>> ps/MipsRegisterInfo.cpp?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/Mips/MipsRegisterInfo.cpp (original)
>>>> +++ llvm/trunk/lib/Target/Mips/MipsRegisterInfo.cpp Wed Mar 11
>>>> 17:42:13 2015
>>>> @@ -100,8 +100,9 @@ MipsRegisterInfo::getCalleeSavedRegs(con
>>>>    return CSR_O32_SaveList;
>>>>  }
>>>>
>>>> -const uint32_t*
>>>> -MipsRegisterInfo::getCallPreservedMask(CallingConv::ID) const {
>>>> +const uint32_t *
>>>> +MipsRegisterInfo::getCallPreservedMask(const MachineFunction &MF,
>>>> +                                       CallingConv::ID) const {
>>>>    if (Subtarget.isSingleFloat())
>>>>      return CSR_SingleFloatOnly_RegMask;
>>>>
>>>>
>>>> Modified: llvm/trunk/lib/Target/Mips/MipsRegisterInfo.h
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mi
>>>> ps/MipsRegisterInfo.h?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/Mips/MipsRegisterInfo.h (original)
>>>> +++ llvm/trunk/lib/Target/Mips/MipsRegisterInfo.h Wed Mar 11 17:42:13
>>>> 2015
>>>> @@ -48,7 +48,8 @@ public:
>>>>    unsigned getRegPressureLimit(const TargetRegisterClass *RC,
>>>>                                 MachineFunction &MF) const override;
>>>>    const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF) const
>>>> override;
>>>> -  const uint32_t *getCallPreservedMask(CallingConv::ID) const
>>>> override;
>>>> +  const uint32_t *getCallPreservedMask(const MachineFunction &MF,
>>>> +                                       CallingConv::ID) const override;
>>>>    static const uint32_t *getMips16RetHelperMask();
>>>>
>>>>    BitVector getReservedRegs(const MachineFunction &MF) const override;
>>>>
>>>> Modified: llvm/trunk/lib/Target/PowerPC/PPCFastISel.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Po
>>>> werPC/PPCFastISel.cpp?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/PowerPC/PPCFastISel.cpp (original)
>>>> +++ llvm/trunk/lib/Target/PowerPC/PPCFastISel.cpp Wed Mar 11 17:42:13
>>>> 2015
>>>> @@ -1532,7 +1532,7 @@ bool PPCFastISel::fastLowerCall(CallLowe
>>>>
>>>>    // Add a register mask with the call-preserved registers.  Proper
>>>>    // defs for return values will be added by setPhysRegsDeadExcept().
>>>> -  MIB.addRegMask(TRI.getCallPreservedMask(CC));
>>>> +  MIB.addRegMask(TRI.getCallPreservedMask(*FuncInfo.MF, CC));
>>>>
>>>>    CLI.Call = MIB;
>>>>
>>>>
>>>> Modified: llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Po
>>>> werPC/PPCISelLowering.cpp?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp (original)
>>>> +++ llvm/trunk/lib/Target/PowerPC/PPCISelLowering.cpp Wed Mar 11
>>>> 17:42:13 2015
>>>> @@ -4187,7 +4187,8 @@ PPCTargetLowering::FinishCall(CallingCon
>>>>
>>>>    // Add a register mask operand representing the call-preserved
>>>> registers.
>>>>    const TargetRegisterInfo *TRI = Subtarget.getRegisterInfo();
>>>> -  const uint32_t *Mask = TRI->getCallPreservedMask(CallConv);
>>>> +  const uint32_t *Mask =
>>>> +      TRI->getCallPreservedMask(DAG.getMachineFunction(), CallConv);
>>>>    assert(Mask && "Missing call preserved mask for calling convention");
>>>>    Ops.push_back(DAG.getRegisterMask(Mask));
>>>>
>>>>
>>>> Modified: llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Po
>>>> werPC/PPCRegisterInfo.cpp?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.cpp (original)
>>>> +++ llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.cpp Wed Mar 11
>>>> 17:42:13 2015
>>>> @@ -128,8 +128,9 @@ PPCRegisterInfo::getCalleeSavedRegs(cons
>>>>                                  CSR_SVR432_SaveList);
>>>>  }
>>>>
>>>> -const uint32_t*
>>>> -PPCRegisterInfo::getCallPreservedMask(CallingConv::ID CC) const {
>>>> +const uint32_t *
>>>> +PPCRegisterInfo::getCallPreservedMask(const MachineFunction &MF,
>>>> +                                      CallingConv::ID CC) const {
>>>>    if (CC == CallingConv::AnyReg) {
>>>>      if (Subtarget.hasVSX())
>>>>        return CSR_64_AllRegs_VSX_RegMask;
>>>>
>>>> Modified: llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.h
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Po
>>>> werPC/PPCRegisterInfo.h?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.h (original)
>>>> +++ llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.h Wed Mar 11
>>>> 17:42:13 2015
>>>> @@ -46,7 +46,8 @@ public:
>>>>
>>>>    /// Code Generation virtual methods...
>>>>    const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF) const
>>>> override;
>>>> -  const uint32_t *getCallPreservedMask(CallingConv::ID CC) const
>>>> override;
>>>> +  const uint32_t *getCallPreservedMask(const MachineFunction &MF,
>>>> +                                       CallingConv::ID CC) const
>>>> override;
>>>>    const uint32_t *getNoPreservedMask() const;
>>>>
>>>>    void adjustStackMapLiveOutMask(uint32_t *Mask) const override;
>>>>
>>>> Modified: llvm/trunk/lib/Target/Sparc/SparcISelLowering.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sp
>>>> arc/SparcISelLowering.cpp?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/Sparc/SparcISelLowering.cpp (original)
>>>> +++ llvm/trunk/lib/Target/Sparc/SparcISelLowering.cpp Wed Mar 11
>>>> 17:42:13 2015
>>>> @@ -915,9 +915,10 @@ SparcTargetLowering::LowerCall_32(Target
>>>>
>>>>    // Add a register mask operand representing the call-preserved
>>>> registers.
>>>>    const SparcRegisterInfo *TRI = Subtarget->getRegisterInfo();
>>>> -  const uint32_t *Mask = ((hasReturnsTwice)
>>>> -                          ? TRI->getRTCallPreservedMask(CallConv)
>>>> -                          : TRI->getCallPreservedMask(CallConv));
>>>> +  const uint32_t *Mask =
>>>> +      ((hasReturnsTwice)
>>>> +           ? TRI->getRTCallPreservedMask(CallConv)
>>>> +           : TRI->getCallPreservedMask(DAG.getMachineFunction(),
>>>> CallConv));
>>>>    assert(Mask && "Missing call preserved mask for calling convention");
>>>>    Ops.push_back(DAG.getRegisterMask(Mask));
>>>>
>>>> @@ -1229,7 +1230,8 @@ SparcTargetLowering::LowerCall_64(Target
>>>>    const SparcRegisterInfo *TRI = Subtarget->getRegisterInfo();
>>>>    const uint32_t *Mask =
>>>>        ((hasReturnsTwice) ? TRI->getRTCallPreservedMask(CLI.CallConv)
>>>> -                         : TRI->getCallPreservedMask(CLI.CallConv));
>>>> +                         : TRI->getCallPreservedMask(DAG.
>>>> getMachineFunction(),
>>>> +                                                     CLI.CallConv));
>>>>    assert(Mask && "Missing call preserved mask for calling convention");
>>>>    Ops.push_back(DAG.getRegisterMask(Mask));
>>>>
>>>> @@ -1904,8 +1906,8 @@ SDValue SparcTargetLowering::LowerGlobal
>>>>      Ops.push_back(Callee);
>>>>      Ops.push_back(Symbol);
>>>>      Ops.push_back(DAG.getRegister(SP::O0, PtrVT));
>>>> -    const uint32_t *Mask =
>>>> -        Subtarget->getRegisterInfo()->getCallPreservedMask(CallingCo
>>>> nv::C);
>>>> +    const uint32_t *Mask = Subtarget->getRegisterInfo()->
>>>> getCallPreservedMask(
>>>> +        DAG.getMachineFunction(), CallingConv::C);
>>>>      assert(Mask && "Missing call preserved mask for calling
>>>> convention");
>>>>      Ops.push_back(DAG.getRegisterMask(Mask));
>>>>      Ops.push_back(InFlag);
>>>>
>>>> Modified: llvm/trunk/lib/Target/Sparc/SparcRegisterInfo.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sp
>>>> arc/SparcRegisterInfo.cpp?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/Sparc/SparcRegisterInfo.cpp (original)
>>>> +++ llvm/trunk/lib/Target/Sparc/SparcRegisterInfo.cpp Wed Mar 11
>>>> 17:42:13 2015
>>>> @@ -43,8 +43,9 @@ SparcRegisterInfo::getCalleeSavedRegs(co
>>>>    return CSR_SaveList;
>>>>  }
>>>>
>>>> -const uint32_t*
>>>> -SparcRegisterInfo::getCallPreservedMask(CallingConv::ID CC) const {
>>>> +const uint32_t *
>>>> +SparcRegisterInfo::getCallPreservedMask(const MachineFunction &MF,
>>>> +                                        CallingConv::ID CC) const {
>>>>    return CSR_RegMask;
>>>>  }
>>>>
>>>>
>>>> Modified: llvm/trunk/lib/Target/Sparc/SparcRegisterInfo.h
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sp
>>>> arc/SparcRegisterInfo.h?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/Sparc/SparcRegisterInfo.h (original)
>>>> +++ llvm/trunk/lib/Target/Sparc/SparcRegisterInfo.h Wed Mar 11
>>>> 17:42:13 2015
>>>> @@ -32,7 +32,8 @@ struct SparcRegisterInfo : public SparcG
>>>>
>>>>    /// Code Generation virtual methods...
>>>>    const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF) const
>>>> override;
>>>> -  const uint32_t* getCallPreservedMask(CallingConv::ID CC) const
>>>> override;
>>>> +  const uint32_t *getCallPreservedMask(const MachineFunction &MF,
>>>> +                                       CallingConv::ID CC) const
>>>> override;
>>>>
>>>>    const uint32_t* getRTCallPreservedMask(CallingConv::ID CC) const;
>>>>
>>>>
>>>> Modified: llvm/trunk/lib/Target/SystemZ/SystemZISelLowering.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sy
>>>> stemZ/SystemZISelLowering.cpp?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/SystemZ/SystemZISelLowering.cpp (original)
>>>> +++ llvm/trunk/lib/Target/SystemZ/SystemZISelLowering.cpp Wed Mar 11
>>>> 17:42:13 2015
>>>> @@ -920,7 +920,7 @@ SystemZTargetLowering::LowerCall(CallLow
>>>>
>>>>    // Add a register mask operand representing the call-preserved
>>>> registers.
>>>>    const TargetRegisterInfo *TRI = Subtarget.getRegisterInfo();
>>>> -  const uint32_t *Mask = TRI->getCallPreservedMask(CallConv);
>>>> +  const uint32_t *Mask = TRI->getCallPreservedMask(MF, CallConv);
>>>>    assert(Mask && "Missing call preserved mask for calling convention");
>>>>    Ops.push_back(DAG.getRegisterMask(Mask));
>>>>
>>>> @@ -1858,7 +1858,8 @@ SDValue SystemZTargetLowering::lowerTLSG
>>>>
>>>>    // Add a register mask operand representing the call-preserved
>>>> registers.
>>>>    const TargetRegisterInfo *TRI = Subtarget.getRegisterInfo();
>>>> -  const uint32_t *Mask = TRI->getCallPreservedMask(CallingConv::C);
>>>> +  const uint32_t *Mask =
>>>> +      TRI->getCallPreservedMask(DAG.getMachineFunction(),
>>>> CallingConv::C);
>>>>    assert(Mask && "Missing call preserved mask for calling convention");
>>>>    Ops.push_back(DAG.getRegisterMask(Mask));
>>>>
>>>>
>>>> Modified: llvm/trunk/lib/Target/SystemZ/SystemZRegisterInfo.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sy
>>>> stemZ/SystemZRegisterInfo.cpp?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/SystemZ/SystemZRegisterInfo.cpp (original)
>>>> +++ llvm/trunk/lib/Target/SystemZ/SystemZRegisterInfo.cpp Wed Mar 11
>>>> 17:42:13 2015
>>>> @@ -28,7 +28,8 @@ SystemZRegisterInfo::getCalleeSavedRegs(
>>>>  }
>>>>
>>>>  const uint32_t *
>>>> -SystemZRegisterInfo::getCallPreservedMask(CallingConv::ID CC) const {
>>>> +SystemZRegisterInfo::getCallPreservedMask(const MachineFunction &MF,
>>>> +                                          CallingConv::ID CC) const {
>>>>    return CSR_SystemZ_RegMask;
>>>>  }
>>>>
>>>>
>>>> Modified: llvm/trunk/lib/Target/SystemZ/SystemZRegisterInfo.h
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sy
>>>> stemZ/SystemZRegisterInfo.h?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/SystemZ/SystemZRegisterInfo.h (original)
>>>> +++ llvm/trunk/lib/Target/SystemZ/SystemZRegisterInfo.h Wed Mar 11
>>>> 17:42:13 2015
>>>> @@ -44,7 +44,8 @@ public:
>>>>      return true;
>>>>    }
>>>>    const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF) const
>>>> override;
>>>> -  const uint32_t *getCallPreservedMask(CallingConv::ID CC) const
>>>> override;
>>>> +  const uint32_t *getCallPreservedMask(const MachineFunction &MF,
>>>> +                                       CallingConv::ID CC) const
>>>> override;
>>>>    BitVector getReservedRegs(const MachineFunction &MF) const override;
>>>>    void eliminateFrameIndex(MachineBasicBlock::iterator MI,
>>>>                             int SPAdj, unsigned FIOperandNum,
>>>>
>>>> Modified: llvm/trunk/lib/Target/X86/X86FastISel.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X8
>>>> 6/X86FastISel.cpp?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/X86/X86FastISel.cpp (original)
>>>> +++ llvm/trunk/lib/Target/X86/X86FastISel.cpp Wed Mar 11 17:42:13 2015
>>>> @@ -3062,7 +3062,7 @@ bool X86FastISel::fastLowerCall(CallLowe
>>>>
>>>>    // Add a register mask operand representing the call-preserved
>>>> registers.
>>>>    // Proper defs for return values will be added by
>>>> setPhysRegsDeadExcept().
>>>> -  MIB.addRegMask(TRI.getCallPreservedMask(CC));
>>>> +  MIB.addRegMask(TRI.getCallPreservedMask(*FuncInfo.MF, CC));
>>>>
>>>>    // Add an implicit use GOT pointer in EBX.
>>>>    if (Subtarget->isPICStyleGOT())
>>>>
>>>> Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X8
>>>> 6/X86ISelLowering.cpp?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
>>>> +++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Wed Mar 11 17:42:13
>>>> 2015
>>>> @@ -3161,7 +3161,7 @@ X86TargetLowering::LowerCall(TargetLower
>>>>
>>>>    // Add a register mask operand representing the call-preserved
>>>> registers.
>>>>    const TargetRegisterInfo *TRI = Subtarget->getRegisterInfo();
>>>> -  const uint32_t *Mask = TRI->getCallPreservedMask(CallConv);
>>>> +  const uint32_t *Mask = TRI->getCallPreservedMask(MF, CallConv);
>>>>    assert(Mask && "Missing call preserved mask for calling convention");
>>>>    Ops.push_back(DAG.getRegisterMask(Mask));
>>>>
>>>> @@ -18453,7 +18453,7 @@ X86TargetLowering::EmitLoweredSegAlloca(
>>>>
>>>>    // Calls into a routine in libgcc to allocate more space from the
>>>> heap.
>>>>    const uint32_t *RegMask =
>>>> -      Subtarget->getRegisterInfo()->getCallPreservedMask(CallingCo
>>>> nv::C);
>>>> +      Subtarget->getRegisterInfo()->getCallPreservedMask(*MF,
>>>> CallingConv::C);
>>>>    if (IsLP64) {
>>>>      BuildMI(mallocMBB, DL, TII->get(X86::MOV64rr), X86::RDI)
>>>>        .addReg(sizeVReg);
>>>> @@ -18538,7 +18538,7 @@ X86TargetLowering::EmitLoweredTLSCall(Ma
>>>>    // FIXME: The 32-bit calls have non-standard calling conventions.
>>>> Use a
>>>>    // proper register mask.
>>>>    const uint32_t *RegMask =
>>>> -      Subtarget->getRegisterInfo()->getCallPreservedMask(CallingCo
>>>> nv::C);
>>>> +      Subtarget->getRegisterInfo()->getCallPreservedMask(*F,
>>>> CallingConv::C);
>>>>    if (Subtarget->is64Bit()) {
>>>>      MachineInstrBuilder MIB = BuildMI(*BB, MI, DL,
>>>>                                        TII->get(X86::MOV64rm), X86::RDI)
>>>>
>>>> Modified: llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X8
>>>> 6/X86RegisterInfo.cpp?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp (original)
>>>> +++ llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp Wed Mar 11 17:42:13
>>>> 2015
>>>> @@ -277,8 +277,9 @@ X86RegisterInfo::getCalleeSavedRegs(cons
>>>>    return CSR_32_SaveList;
>>>>  }
>>>>
>>>> -const uint32_t*
>>>> -X86RegisterInfo::getCallPreservedMask(CallingConv::ID CC) const {
>>>> +const uint32_t *
>>>> +X86RegisterInfo::getCallPreservedMask(const MachineFunction &MF,
>>>> +                                      CallingConv::ID CC) const {
>>>>    bool HasAVX = Subtarget.hasAVX();
>>>>    bool HasAVX512 = Subtarget.hasAVX512();
>>>>
>>>> @@ -360,7 +361,7 @@ BitVector X86RegisterInfo::getReservedRe
>>>>    // Set the base-pointer register and its aliases as reserved if
>>>> needed.
>>>>    if (hasBasePointer(MF)) {
>>>>      CallingConv::ID CC = MF.getFunction()->getCallingConv();
>>>> -    const uint32_t* RegMask = getCallPreservedMask(CC);
>>>> +    const uint32_t *RegMask = getCallPreservedMask(MF, CC);
>>>>      if (MachineOperand::clobbersPhysReg(RegMask, getBaseRegister()))
>>>>        report_fatal_error(
>>>>          "Stack realignment in presence of dynamic allocas is not
>>>> supported with"
>>>>
>>>> Modified: llvm/trunk/lib/Target/X86/X86RegisterInfo.h
>>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X8
>>>> 6/X86RegisterInfo.h?rev=231979&r1=231978&r2=231979&view=diff
>>>> ============================================================
>>>> ==================
>>>> --- llvm/trunk/lib/Target/X86/X86RegisterInfo.h (original)
>>>> +++ llvm/trunk/lib/Target/X86/X86RegisterInfo.h Wed Mar 11 17:42:13
>>>> 2015
>>>> @@ -99,7 +99,8 @@ public:
>>>>    /// callee-save registers on this target.
>>>>    const MCPhysReg *
>>>>    getCalleeSavedRegs(const MachineFunction* MF) const override;
>>>> -  const uint32_t *getCallPreservedMask(CallingConv::ID) const
>>>> override;
>>>> +  const uint32_t *getCallPreservedMask(const MachineFunction &MF,
>>>> +                                       CallingConv::ID) const override;
>>>>    const uint32_t *getNoPreservedMask() const;
>>>>
>>>>    /// getReservedRegs - Returns a bitset indexed by physical register
>>>> number
>>>>
>>>>
>>>> _______________________________________________
>>>> llvm-commits mailing list
>>>> llvm-commits at cs.uiuc.edu
>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>>
>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150313/f83ba2b0/attachment.html>


More information about the llvm-commits mailing list