<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">2015-07-27 11:38 GMT-07:00 Duncan P. N. Exon Smith <span dir="ltr"><<a href="mailto:dexonsmith@apple.com" target="_blank">dexonsmith@apple.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
> On 2015-Jul-24, at 15:22, Alex Lorenz <<a href="mailto:arphaman@gmail.com">arphaman@gmail.com</a>> wrote:<br>
><br>
> Author: arphaman<br>
> Date: Fri Jul 24 17:22:50 2015<br>
> New Revision: 243173<br>
><br>
> URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D243173-26view-3Drev&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=vD6j7VdkJObxSTClCwJQKYP2HSUZ7u3OnNnt-hfgnOo&s=K4YbAvKzYVHFpsVldtnl0ZjAtPMIVzMoIEKv7xbyRuA&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=243173&view=rev</a><br>
> Log:<br>
> MIR Serialization: Serialize MachineFrameInfo's callee saved information.<br>
><br>
> This commit serializes the callee saved information from the class<br>
> 'MachineFrameInfo'. This commit extends the YAML mappings for the fixed and<br>
> the ordinary stack objects and adds an optional 'callee-saved-register'<br>
> attribute. This attribute is used to serialize the callee save information.<br>
><br>
> Added:<br>
>    llvm/trunk/test/CodeGen/MIR/X86/callee-saved-info.mir<br>
>    llvm/trunk/test/CodeGen/MIR/X86/expected-named-register-in-callee-saved-register.mir<br>
> Modified:<br>
>    llvm/trunk/include/llvm/CodeGen/MIRYamlMapping.h<br>
>    llvm/trunk/lib/CodeGen/MIRParser/MIRParser.cpp<br>
>    llvm/trunk/lib/CodeGen/MIRPrinter.cpp<br>
><br>
> Modified: llvm/trunk/include/llvm/CodeGen/MIRYamlMapping.h<br>
</span><span class="">> URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_CodeGen_MIRParser_MIRParser.cpp-3Frev-3D243173-26r1-3D243172-26r2-3D243173-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=vD6j7VdkJObxSTClCwJQKYP2HSUZ7u3OnNnt-hfgnOo&s=zstlSSS5jiHZldlZhTQ7c3zJT0sOlfhkCVDP5BPLt_U&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MIRParser/MIRParser.cpp?rev=243173&r1=243172&r2=243173&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/lib/CodeGen/MIRParser/MIRParser.cpp (original)<br>
> +++ llvm/trunk/lib/CodeGen/MIRParser/MIRParser.cpp Fri Jul 24 17:22:50 2015<br>
</span><span class="">> @@ -273,8 +278,7 @@ bool MIRParserImpl::initializeMachineFun<br>
>   PerFunctionMIParsingState PFS;<br>
>   if (initializeRegisterInfo(MF, MF.getRegInfo(), YamlMF, PFS))<br>
>     return true;<br>
> -  if (initializeFrameInfo(*MF.getFunction(), *MF.getFrameInfo(), YamlMF,<br>
> -                          PFS.StackObjectSlots, PFS.FixedStackObjectSlots))<br>
> +  if (initializeFrameInfo(MF, *MF.getFrameInfo(), YamlMF, PFS))<br>
<br>
</span>Why doesn't the callee call `MF.getFrameInfo()`?<br>
<span class=""><br>
>     return true;<br>
>   if (!YamlMF.Constants.empty()) {<br>
>     auto *ConstantPool = MF.getConstantPool();<br>
> @@ -401,11 +405,11 @@ bool MIRParserImpl::initializeRegisterIn<br>
>   return false;<br>
> }<br>
><br>
> -bool MIRParserImpl::initializeFrameInfo(<br>
> -    const Function &F, MachineFrameInfo &MFI,<br>
> -    const yaml::MachineFunction &YamlMF,<br>
> -    DenseMap<unsigned, int> &StackObjectSlots,<br>
> -    DenseMap<unsigned, int> &FixedStackObjectSlots) {<br>
> +bool MIRParserImpl::initializeFrameInfo(MachineFunction &MF,<br>
> +                                        MachineFrameInfo &MFI,<br>
<br>
</span>Can't `MFI` be trivially derived from `MF`?  Do you need both parameters?<br></blockquote><div><br></div><div>The two parameters aren't needed, but I decided to go for this approach</div><div>in order to be consistent with the method 'initializeRegisterInfo',</div><div>which also takes in a machine function and the machine function's</div><div>register information.</div><div><br></div><div>It's probably better to use just a single machine function parameter for</div><div>both of these methods. I will commit a fix later.</div><div><br></div><div>Alex</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5"><br>
> +                                        const yaml::MachineFunction &YamlMF,<br>
> +                                        PerFunctionMIParsingState &PFS) {<br>
> +  const Function &F = *MF.getFunction();<br>
>   const yaml::MachineFrameInfo &YamlMFI = YamlMF.FrameInfo;<br>
>   MFI.setFrameAddressIsTaken(YamlMFI.IsFrameAddressTaken);<br>
>   MFI.setReturnAddressIsTaken(YamlMFI.IsReturnAddressTaken);<br>
> @@ -422,6 +426,7 @@ bool MIRParserImpl::initializeFrameInfo(<br>
>   MFI.setHasVAStart(YamlMFI.HasVAStart);<br>
>   MFI.setHasMustTailInVarArgFunc(YamlMFI.HasMustTailInVarArgFunc);<br>
><br>
> +  std::vector<CalleeSavedInfo> CSIInfo;<br>
>   // Initialize the fixed frame objects.<br>
>   for (const auto &Object : YamlMF.FixedStackObjects) {<br>
>     int ObjectIdx;<br>
<br>
</div></div></blockquote></div><br></div></div>