<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle18
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle19
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle20
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle21
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
span.EmailStyle22
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle23
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><span style="color:#1F497D">What do you mean by “DAG format”?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">The JSON text describes a DAG, which can be used to recover the internal representation of the program used by the compiler.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">The IR C++ data structures in the compiler also represent the program as a DAG of C++ objects.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Mihai<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> hemant@mnkcg.com [mailto:hemant@mnkcg.com] <br>
<b>Sent:</b> Friday, August 4, 2017 2:59 PM<br>
<b>To:</b> Mihai Budiu <mbudiu@vmware.com>; 'Antonin Bas' <antonin@barefootnetworks.com>; p4-dev@lists.p4.org<br>
<b>Subject:</b> RE: [P4-dev] p4test and IR in JSON format question<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal" style="background:white">My question was indeed, why I don’t see a “size” : 16 in ir.json around the snipped output in my email.   I didn’t know the IR was in serialized form.   I looked for the IR node with number 456 and found the “size”
 : 16 elsewhere in ir.json.   I am interested in using p4test to dump the Midend IR that a backend will receive.  My preference is to receive this IR in a DAG format.  Is that possible with p4test?<o:p></o:p></p>
<p class="MsoNormal" style="background:white"><o:p> </o:p></p>
<p class="MsoNormal" style="background:white">Thanks,<o:p></o:p></p>
<p class="MsoNormal" style="background:white"><o:p> </o:p></p>
<p class="MsoNormal" style="background:white">Hemant<o:p></o:p></p>
<p class="MsoNormal" style="background:white"><span style="font-size:12.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> Mihai Budiu [<a href="mailto:mbudiu@vmware.com">mailto:mbudiu@vmware.com</a>]
<br>
<b>Sent:</b> Friday, August 04, 2017 4:07 PM<br>
<b>To:</b> <a href="mailto:hemant@mnkcg.com">hemant@mnkcg.com</a>; 'Antonin Bas' <<a href="mailto:antonin@barefootnetworks.com">antonin@barefootnetworks.com</a>>;
<a href="mailto:p4-dev@lists.p4.org">p4-dev@lists.p4.org</a><br>
<b>Subject:</b> RE: [P4-dev] p4test and IR in JSON format question<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:#1F497D">I am not sure what is the actual question you are asking.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">The JSON you are dumping is actually the internal representation of the program inside the compiler. There is a separate JSON representation of the program, which is consumed by the behavioral model; that representation
 is produced by the p4c-bm2-ss compiler using the –o flag.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Assuming that what you care about is the internal IR, then the type of the ‘metadata’ field is in the IR node with number 456, which should be present somewhere in the JSON file, and should look like this:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">                        "type" : {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">                          "Node_ID" : 456,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">                          "Node_Type" : "Type_Bits",<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">                          "size" : 16,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">                          "isSigned" : false<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">                        },<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">What you see are just references to this node. The IR is a DAG, and in the serialized form each node appears only once; subsequent appearances of a node are replaced with a reference to the first appearance,
 which has always a unique nodeId.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Mihai<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> P4-dev [<a href="mailto:p4-dev-bounces@lists.p4.org">mailto:p4-dev-bounces@lists.p4.org</a>]
<b>On Behalf Of </b><a href="mailto:hemant@mnkcg.com">hemant@mnkcg.com</a><br>
<b>Sent:</b> Thursday, August 03, 2017 11:40 AM<br>
<b>To:</b> 'p4-dev' <<a href="mailto:p4-dev@lists.p4.org">p4-dev@lists.p4.org</a>><br>
<b>Subject:</b> Re: [P4-dev] p4test and IR in JSON format question<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Sorry, I forgot to add the annotation in the mystruct  example below.   I have added it now.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> P4-dev [<a href="mailto:p4-dev-bounces@lists.p4.org">mailto:p4-dev-bounces@lists.p4.org</a>]
<b>On Behalf Of </b><a href="mailto:hemant@mnkcg.com">hemant@mnkcg.com</a><br>
<b>Sent:</b> Thursday, August 03, 2017 10:46 AM<br>
<b>To:</b> 'p4-dev' <<a href="mailto:p4-dev@lists.p4.org">p4-dev@lists.p4.org</a>><br>
<b>Subject:</b> [P4-dev] p4test and IR in JSON format question<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-size:12.0pt">I have used this command to generate IR to various output files.<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";background:white">./p4test --p4v 16 ~/p4-xpc/mySwitch.p4 --top4 FrontEndLast,MidEndLast --toJSON ~/ir.json --dump ~ -v<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";background:white"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;background:white">I get the following output files.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";background:white"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:12.0pt;font-family:"Courier New"">mySwitch-FrontEnd_31_FrontEndLast.p4<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:12.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:12.0pt;font-family:"Courier New"">mySwitch-MidEnd_40_MidEndLast.p4<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";background:white"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";background:white">ir.json<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";background:white"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:12.0pt;background:white">My P4-16 program has this struct defined.<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:12.0pt;background:white"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:12.0pt;font-family:"Courier New"">struct mystruct_t {<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:12.0pt;font-family:"Courier New";background:yellow;mso-highlight:yellow">@MY_annotation("(FOO)")</span><span style="font-size:12.0pt;font-family:"Courier New""><o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:12.0pt;font-family:"Courier New"">bit<16>   metadata;<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:12.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:12.0pt;font-family:"Courier New"">}<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:12.0pt;background:white"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:12.0pt;background:white">In the
</span><span style="font-size:12.0pt;font-family:"Courier New"">mySwitch-MidEnd_40_MidEndLast.p4
</span><span style="font-size:12.0pt">file, I see my data struct in the P4 program show up with its bit fields. 
<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:12.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:12.0pt;font-family:"Courier New";background:white">/* </span><span style="font-size:12.0pt;font-family:"Courier New""><br id="yiv8885279415yui_3_16_0_ym19_1_1501711436962_53904">
<span style="background:white">  <Type_Struct>(978058) */</span><br id="yiv8885279415yui_3_16_0_ym19_1_1501711436962_53905">
<span style="background:white">struct mystruct_t {</span><br id="yiv8885279415yui_3_16_0_ym19_1_1501711436962_53906">
<span style="background:white">/* </span><br id="yiv8885279415yui_3_16_0_ym19_1_1501711436962_53907">
<span style="background:white">    <StructField>(978060)</span><br id="yiv8885279415yui_3_16_0_ym19_1_1501711436962_53908">
<span style="background:white">      <Annotations>(978061)</span><br id="yiv8885279415yui_3_16_0_ym19_1_1501711436962_53909">
<span style="background:white">      <Type_Bits>(456) */</span><br id="yiv8885279415yui_3_16_0_ym19_1_1501711436962_53910">
<span style="background:white">        @MY_annotation("(FOO)") </span><br id="yiv8885279415yui_3_16_0_ym19_1_1501711436962_53911">
<span style="background:white">    bit<16> metadata;</span><br id="yiv8885279415yui_3_16_0_ym19_1_1501711436962_53912">
<span style="background:white">}</span></span><span style="font-size:12.0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:12.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:12.0pt">However, the
</span><span style="font-size:12.0pt;font-family:"Courier New"">ir.json</span><span style="font-size:12.0pt"> file  does not show any bits with the metadata field.  An operative question is which IR does the –toJSON dump, especially, in comparison to the MidEndLast
 pass?  Then, the next question is, why the 16 bits do not show up in the JSON output below?  How does a backend know the metadata fields comprises of 16 bits?  Did I miss anything in the JSON IR below? 
<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:12.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:12.0pt;font-family:"Courier New"">{<br>
        "Node_ID" : 978058,<br>
        "Node_Type" : "Type_Struct",<br>
        "name" : "mystruct_t",<br>
        "declid" : 369,<br>
        "annotations" : {<br>
          "Node_ID" : 3<br>
        },<br>
        "fields" : {<br>
          "Node_ID" : 978059,<br>
          "Node_Type" : "IndexedVector<StructField>",<br>
          "vec" : [<br>
            {<br>
              "Node_ID" : 978060,<br>
              "Node_Type" : "StructField",<br>
              "name" : "metadata",<br>
              "declid" : 5560,<br>
              "annotations" : {<br>
                "Node_ID" : 978061,<br>
                "Node_Type" : "Annotations",<br>
                "annotations" : {<br>
                  "Node_ID" : 978062,<br>
                  "Node_Type" : "Vector<Annotation>",<br>
                  "vec" : [<br>
                    {<br>
                      "Node_ID" : 978063,<br>
                      "Node_Type" : "Annotation",<br>
                      "name" : "MY_annotation",<br>
                      "expr" : {<br>
                        "Node_ID" : 978064,<br>
                        "Node_Type" : "Vector<Expression>",<br>
                        "vec" : [<br>
                          {<br>
                            "Node_ID" : 978065,<br>
                            "Node_Type" : "StringLiteral",<br>
                            "type" : {<br>
                              "Node_ID" : 55225<br>
                            },<br>
                            "value" : "(FOO)",<br>
                            "Source_Info" : {<br>
                              "filename" : "/home/hemant/mySwitch.p4",<br>
                              "line" : 71,<br>
                              "column" : 25,<br>
                              "source_fragment" : """<br>
                            }<br>
                          }<br>
                        ]<br>
                      },<br>
                      "Source_Info" : {<br>
                        "filename" : "/home/hemant/mySwitch.p4",<br>
                        "line" : 71,<br>
                        "column" : 0,<br>
                        "source_fragment" : "@"<br>
                      }<br>
                    }<br>
                  ]<br>
                },<br>
                "Source_Info" : {<br>
                  "filename" : "/home/hemant/mySwitch.p4",<br>
                  "line" : 71,<br>
                  "column" : 0,<br>
                  "source_fragment" : "@MY_annotation("(FOO)")"<br>
                }<br>
              },<br>
              "type" : {<br>
                "Node_ID" : 456<br>
              },<br>
              "Source_Info" : {<br>
                "filename" : "/home/hemant/mySwitch.p4",<br>
                "line" : 72,<br>
                "column" : 12,<br>
                "source_fragment" : "metadata"<br>
              }<br>
            }<br>
          ],<br>
          "declarations" : {<br>
            "metadata" : {<br>
              "Node_ID" : 978060,<br>
              "Node_Type" : "StructField",<br>
              "name" : "metadata",<br>
              "declid" : 5560,<br>
              "annotations" : {<br>
                "Node_ID" : 978061<br>
              },<br>
              "type" : {<br>
                "Node_ID" : 456<br>
              }<br>
            }<br>
          }<br>
        },<o:p></o:p></span></p>
<p class="MsoNormal" style="background:white"><span style="font-size:12.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;background:white">Thanks,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;background:white"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;background:white">Hemant<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Courier New";background:white"><o:p> </o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>