{"id":303,"date":"2018-07-20T11:35:26","date_gmt":"2018-07-20T11:35:26","guid":{"rendered":"http:\/\/csp10.epgpbooks.inflibnet.ac.in\/?post_type=chapter&#038;p=303"},"modified":"2018-07-20T11:35:58","modified_gmt":"2018-07-20T11:35:58","slug":"global-data-flow-analysis","status":"publish","type":"chapter","link":"https:\/\/ebooks.inflibnet.ac.in\/csp10\/chapter\/global-data-flow-analysis\/","title":{"rendered":"Global Data Flow Analysis"},"content":{"raw":"<p style=\"text-align: justify\">After knowing the concepts of optimizations in basic blocks and loops, in this module we will study about how to perform optimization by means of data flow analysis. We shall discuss the need and usage of data- flow analysis from a code optimization perspective. We shall also discuss the computation of data-flow equation parameters for the various types of statements.<\/p>\r\n&nbsp;\r\n\r\n<strong>36.1 Global Data-Flow Analysis<\/strong>\r\n\r\n&nbsp;\r\n<p style=\"text-align: justify\">Knowledge about the behavior of a variable is essential for performing function preserving transformations. In addition to the behavior of the variables, control flow information is also required to do transformations across basic blocks. In addition, to apply global optimizations on basic blocks, data- flow information is collected by solving systems of data- flow equations.<\/p>\r\n&nbsp;\r\n\r\n<strong>36.1.1 Data flow equations<\/strong>\r\n\r\n&nbsp;\r\n<p style=\"text-align: justify\">A variable is defined at a particular statement. The value of this variable may reach subsequent sequence of instructions. The variable when it is defined, we call it as being generated and is indicated using gen[S], which means, statement S generates this variable. Thus this variable with the value it has gets forwarded to all other statements until some other statement kills this definition of the variable. Thus to determine the reaching definitions for a sequence of statements \u201cS\u201d the following equation is defined in terms of 4 functions.<\/p>\r\n&nbsp;\r\n\r\n&nbsp;\r\n\r\nout[S] = gen[S] \u00c8 (in[S] - kill[S])\u00a0\u00a0\u00a0\u00a0 \u00e0 (36.1)\r\n\r\n&nbsp;\r\n<p style=\"text-align: justify\">In the above equation 36.1, out[S] indicates the variables which are available after statement S and this is computed in terms of the variables the current statement generates and including the statements that enter a block eliminating the definitions of variables the current statement kills. The information at the end of a statement S is either generated within the statement or enters at the beginning and is not killed as control flows through the statement.<\/p>\r\n&nbsp;\r\n\r\n<strong>36.1.2 Factors for setting up data -flow equations<\/strong>\r\n\r\n&nbsp;\r\n<p style=\"text-align: justify\">The notion of killing and generating statements depends on the desired information and on the data-flow analysis problem to be solved. For some problems the function out[S] needs to be defined in terms of in[S] and for some in[S] needs to be defined in terms of out[S]. Data flow is affected by the control flow of the program. The function out [S] is based on the assumption that there is a unique end point. In addition, we need to consider that the variable assignments through pointer variables, procedure calls, assignments to array variables influence the data flow. Consider the following example given in figure 36.1, involving three basic blocks. We will look at each statement as a definition of the LHS variable.<\/p>\r\n<img class=\"size-full wp-image-304 aligncenter\" src=\"http:\/\/csp10.epgpbooks.inflibnet.ac.in\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-182.png\" alt=\"\" width=\"337\" height=\"225\" \/>\r\n<p style=\"text-align: justify\">We define two important terminologies before discussing the data flow equations. A \u201cpoint\u201d is defined as the position between two adjacent statements. In addition, a \u201cpoint\u201d can also be the position above the first statement and following the last statement. For example, in figure 36.1, basic block B1 has 3 points while B2 has 2 points. If we consider all the blocks then each will have many points. If we try to merge the last point of a current block with the first point of its successor block then we could end up with the sequence of statements that can be looked together to perform some optimization. On the other hand, a path is the sequence of statements between any two points.<\/p>\r\n&nbsp;\r\n\r\n<strong>36.1.3 Reaching Definitions<\/strong>\r\n\r\n&nbsp;\r\n<p style=\"text-align: justify\">As discussed already, a definition of a variable \u2018x\u2019 is a state ment that assigns or may assign a value to \u2018x\u2019. This definition of the variable \u2018x\u2019 is unambiguous if a simple assignment holds good. On the other hand, if \u2018x\u2019 is used as a parameter of a procedure or through pointer then \u2018x\u2019 is said to have defined with ambiguity. Definition \u2018d\u2019 reaches a point \u2018p\u2019 if there is a path from the point immediately following \u2018d\u2019 to \u2018p\u2019 and \u2018d\u2019 is not killed in that path. A \u201ckill\u201d is defined as the position between two points, where the variable is defined and is redefined. Consider the figure 36.1 for which we have three definitions. Table 36.1 gives the definitions of the various blocks.<\/p>\r\n&nbsp;\r\n\r\n<img class=\"size-full wp-image-305 aligncenter\" src=\"http:\/\/csp10.epgpbooks.inflibnet.ac.in\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-183.png\" alt=\"\" width=\"671\" height=\"485\" \/>\r\n\r\n<strong>36.2 Data flow analysis \u2013 structure d programs<\/strong>\r\n\r\n&nbsp;\r\n<p style=\"text-align: justify\">Let us consider the data flow analysis of structured programs. In order to understand the data flow, we need to know the various forms of statements. The assumption with the statements is that there is a single entry and single exit point.<\/p>\r\n&nbsp;\r\n<p style=\"text-align: justify\">Statements can be simple assignment statements, if-else, or a do-while statement or a sequence of these statements. A while statement could be interpreted in terms of the do-while statement itself. The following productions define the various types of statements where S is the start symbol and E is the expression. For simplicity, consider that this expression could be addition of variables of just the variable itself. We also assume that there is a unique header for all these types of statements which is the beginning of a control flow.<\/p>\r\n\r\n<ul>\r\n \t<li>S \u00e0 id := E | S ; S | if E then S else S | do S while E<\/li>\r\n \t<li>E \u00e0 id + id | id<\/li>\r\n<\/ul>\r\nLet us consider one statement after the other and to begin with consider the state ment defined by the following production.\r\n\r\n&nbsp;\r\n\r\n<img class=\"size-full wp-image-306 aligncenter\" src=\"http:\/\/csp10.epgpbooks.inflibnet.ac.in\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-184.png\" alt=\"\" width=\"644\" height=\"208\" \/>\r\n\r\nConsider figure 36.2 which is a control flow for a simple assignment statement having a single definition of the variable \u2018a\u2019. Then, the data-flow equations for <em>S<\/em> are:\r\n\r\n<em>gen <\/em>[<em>S<\/em>]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = {<em>d<\/em>} \u2013 This statement defines the definition \u2018d\u2019 and hence it is included.\r\n\r\n<em>kill <\/em>[<em>S<\/em>]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = <em>D<\/em><strong>a<\/strong> - {<em>d<\/em>}\u00a0 - This definition kills all other definitions of \u2018a\u2019 and is computed as\r\n\r\n&nbsp;\r\n\r\n<img class=\"size-full wp-image-307 aligncenter\" src=\"http:\/\/csp10.epgpbooks.inflibnet.ac.in\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-185.png\" alt=\"\" width=\"660\" height=\"890\" \/>\r\n\r\n<img class=\"size-full wp-image-308 aligncenter\" src=\"http:\/\/csp10.epgpbooks.inflibnet.ac.in\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-186.png\" alt=\"\" width=\"668\" height=\"917\" \/>\r\n\r\n<img class=\"size-full wp-image-309 aligncenter\" src=\"http:\/\/csp10.epgpbooks.inflibnet.ac.in\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-187.png\" alt=\"\" width=\"677\" height=\"885\" \/>\r\n\r\n<img class=\"size-full wp-image-310 aligncenter\" src=\"http:\/\/csp10.epgpbooks.inflibnet.ac.in\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-188.png\" alt=\"\" width=\"692\" height=\"893\" \/>\r\n\r\n<img class=\"size-full wp-image-311 aligncenter\" src=\"http:\/\/csp10.epgpbooks.inflibnet.ac.in\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-189.png\" alt=\"\" width=\"672\" height=\"866\" \/>\r\n\r\n<img class=\"size-full wp-image-312 aligncenter\" src=\"http:\/\/csp10.epgpbooks.inflibnet.ac.in\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-190.png\" alt=\"\" width=\"701\" height=\"624\" \/>","rendered":"<p style=\"text-align: justify\">After knowing the concepts of optimizations in basic blocks and loops, in this module we will study about how to perform optimization by means of data flow analysis. We shall discuss the need and usage of data- flow analysis from a code optimization perspective. We shall also discuss the computation of data-flow equation parameters for the various types of statements.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>36.1 Global Data-Flow Analysis<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify\">Knowledge about the behavior of a variable is essential for performing function preserving transformations. In addition to the behavior of the variables, control flow information is also required to do transformations across basic blocks. In addition, to apply global optimizations on basic blocks, data- flow information is collected by solving systems of data- flow equations.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>36.1.1 Data flow equations<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify\">A variable is defined at a particular statement. The value of this variable may reach subsequent sequence of instructions. The variable when it is defined, we call it as being generated and is indicated using gen[S], which means, statement S generates this variable. Thus this variable with the value it has gets forwarded to all other statements until some other statement kills this definition of the variable. Thus to determine the reaching definitions for a sequence of statements \u201cS\u201d the following equation is defined in terms of 4 functions.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>out[S] = gen[S] \u00c8 (in[S] &#8211; kill[S])\u00a0\u00a0\u00a0\u00a0 \u00e0 (36.1)<\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify\">In the above equation 36.1, out[S] indicates the variables which are available after statement S and this is computed in terms of the variables the current statement generates and including the statements that enter a block eliminating the definitions of variables the current statement kills. The information at the end of a statement S is either generated within the statement or enters at the beginning and is not killed as control flows through the statement.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>36.1.2 Factors for setting up data -flow equations<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify\">The notion of killing and generating statements depends on the desired information and on the data-flow analysis problem to be solved. For some problems the function out[S] needs to be defined in terms of in[S] and for some in[S] needs to be defined in terms of out[S]. Data flow is affected by the control flow of the program. The function out [S] is based on the assumption that there is a unique end point. In addition, we need to consider that the variable assignments through pointer variables, procedure calls, assignments to array variables influence the data flow. Consider the following example given in figure 36.1, involving three basic blocks. We will look at each statement as a definition of the LHS variable.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-304 aligncenter\" src=\"http:\/\/csp10.epgpbooks.inflibnet.ac.in\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-182.png\" alt=\"\" width=\"337\" height=\"225\" srcset=\"https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-182.png 337w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-182-300x200.png 300w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-182-65x43.png 65w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-182-225x150.png 225w\" sizes=\"auto, (max-width: 337px) 100vw, 337px\" \/><\/p>\n<p style=\"text-align: justify\">We define two important terminologies before discussing the data flow equations. A \u201cpoint\u201d is defined as the position between two adjacent statements. In addition, a \u201cpoint\u201d can also be the position above the first statement and following the last statement. For example, in figure 36.1, basic block B1 has 3 points while B2 has 2 points. If we consider all the blocks then each will have many points. If we try to merge the last point of a current block with the first point of its successor block then we could end up with the sequence of statements that can be looked together to perform some optimization. On the other hand, a path is the sequence of statements between any two points.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>36.1.3 Reaching Definitions<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify\">As discussed already, a definition of a variable \u2018x\u2019 is a state ment that assigns or may assign a value to \u2018x\u2019. This definition of the variable \u2018x\u2019 is unambiguous if a simple assignment holds good. On the other hand, if \u2018x\u2019 is used as a parameter of a procedure or through pointer then \u2018x\u2019 is said to have defined with ambiguity. Definition \u2018d\u2019 reaches a point \u2018p\u2019 if there is a path from the point immediately following \u2018d\u2019 to \u2018p\u2019 and \u2018d\u2019 is not killed in that path. A \u201ckill\u201d is defined as the position between two points, where the variable is defined and is redefined. Consider the figure 36.1 for which we have three definitions. Table 36.1 gives the definitions of the various blocks.<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-305 aligncenter\" src=\"http:\/\/csp10.epgpbooks.inflibnet.ac.in\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-183.png\" alt=\"\" width=\"671\" height=\"485\" srcset=\"https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-183.png 671w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-183-300x217.png 300w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-183-65x47.png 65w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-183-225x163.png 225w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-183-350x253.png 350w\" sizes=\"auto, (max-width: 671px) 100vw, 671px\" \/><\/p>\n<p><strong>36.2 Data flow analysis \u2013 structure d programs<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify\">Let us consider the data flow analysis of structured programs. In order to understand the data flow, we need to know the various forms of statements. The assumption with the statements is that there is a single entry and single exit point.<\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify\">Statements can be simple assignment statements, if-else, or a do-while statement or a sequence of these statements. A while statement could be interpreted in terms of the do-while statement itself. The following productions define the various types of statements where S is the start symbol and E is the expression. For simplicity, consider that this expression could be addition of variables of just the variable itself. We also assume that there is a unique header for all these types of statements which is the beginning of a control flow.<\/p>\n<ul>\n<li>S \u00e0 id := E | S ; S | if E then S else S | do S while E<\/li>\n<li>E \u00e0 id + id | id<\/li>\n<\/ul>\n<p>Let us consider one statement after the other and to begin with consider the state ment defined by the following production.<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-306 aligncenter\" src=\"http:\/\/csp10.epgpbooks.inflibnet.ac.in\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-184.png\" alt=\"\" width=\"644\" height=\"208\" srcset=\"https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-184.png 644w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-184-300x97.png 300w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-184-65x21.png 65w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-184-225x73.png 225w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-184-350x113.png 350w\" sizes=\"auto, (max-width: 644px) 100vw, 644px\" \/><\/p>\n<p>Consider figure 36.2 which is a control flow for a simple assignment statement having a single definition of the variable \u2018a\u2019. Then, the data-flow equations for <em>S<\/em> are:<\/p>\n<p><em>gen <\/em>[<em>S<\/em>]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = {<em>d<\/em>} \u2013 This statement defines the definition \u2018d\u2019 and hence it is included.<\/p>\n<p><em>kill <\/em>[<em>S<\/em>]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = <em>D<\/em><strong>a<\/strong> &#8211; {<em>d<\/em>}\u00a0 &#8211; This definition kills all other definitions of \u2018a\u2019 and is computed as<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-307 aligncenter\" src=\"http:\/\/csp10.epgpbooks.inflibnet.ac.in\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-185.png\" alt=\"\" width=\"660\" height=\"890\" srcset=\"https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-185.png 660w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-185-222x300.png 222w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-185-65x88.png 65w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-185-225x303.png 225w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-185-350x472.png 350w\" sizes=\"auto, (max-width: 660px) 100vw, 660px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-308 aligncenter\" src=\"http:\/\/csp10.epgpbooks.inflibnet.ac.in\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-186.png\" alt=\"\" width=\"668\" height=\"917\" srcset=\"https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-186.png 668w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-186-219x300.png 219w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-186-65x89.png 65w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-186-225x309.png 225w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-186-350x480.png 350w\" sizes=\"auto, (max-width: 668px) 100vw, 668px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-309 aligncenter\" src=\"http:\/\/csp10.epgpbooks.inflibnet.ac.in\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-187.png\" alt=\"\" width=\"677\" height=\"885\" srcset=\"https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-187.png 677w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-187-229x300.png 229w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-187-65x85.png 65w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-187-225x294.png 225w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-187-350x458.png 350w\" sizes=\"auto, (max-width: 677px) 100vw, 677px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-310 aligncenter\" src=\"http:\/\/csp10.epgpbooks.inflibnet.ac.in\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-188.png\" alt=\"\" width=\"692\" height=\"893\" srcset=\"https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-188.png 692w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-188-232x300.png 232w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-188-65x84.png 65w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-188-225x290.png 225w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-188-350x452.png 350w\" sizes=\"auto, (max-width: 692px) 100vw, 692px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-311 aligncenter\" src=\"http:\/\/csp10.epgpbooks.inflibnet.ac.in\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-189.png\" alt=\"\" width=\"672\" height=\"866\" srcset=\"https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-189.png 672w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-189-233x300.png 233w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-189-65x84.png 65w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-189-225x290.png 225w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-189-350x451.png 350w\" sizes=\"auto, (max-width: 672px) 100vw, 672px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-312 aligncenter\" src=\"http:\/\/csp10.epgpbooks.inflibnet.ac.in\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-190.png\" alt=\"\" width=\"701\" height=\"624\" srcset=\"https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-190.png 701w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-190-300x267.png 300w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-190-65x58.png 65w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-190-225x200.png 225w, https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-content\/uploads\/sites\/50\/2018\/07\/Untitled-190-350x312.png 350w\" sizes=\"auto, (max-width: 701px) 100vw, 701px\" \/><\/p>\n","protected":false},"author":4,"menu_order":36,"template":"","meta":{"pb_show_title":"on","pb_short_title":"","pb_subtitle":"","pb_authors":["dr-rajeswari-sridhar"],"pb_section_license":""},"chapter-type":[],"contributor":[59],"license":[],"class_list":["post-303","chapter","type-chapter","status-publish","hentry","contributor-dr-rajeswari-sridhar"],"part":3,"_links":{"self":[{"href":"https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-json\/pressbooks\/v2\/chapters\/303","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-json\/pressbooks\/v2\/chapters"}],"about":[{"href":"https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-json\/wp\/v2\/types\/chapter"}],"author":[{"embeddable":true,"href":"https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-json\/wp\/v2\/users\/4"}],"version-history":[{"count":1,"href":"https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-json\/pressbooks\/v2\/chapters\/303\/revisions"}],"predecessor-version":[{"id":313,"href":"https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-json\/pressbooks\/v2\/chapters\/303\/revisions\/313"}],"part":[{"href":"https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-json\/pressbooks\/v2\/parts\/3"}],"metadata":[{"href":"https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-json\/pressbooks\/v2\/chapters\/303\/metadata\/"}],"wp:attachment":[{"href":"https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-json\/wp\/v2\/media?parent=303"}],"wp:term":[{"taxonomy":"chapter-type","embeddable":true,"href":"https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-json\/pressbooks\/v2\/chapter-type?post=303"},{"taxonomy":"contributor","embeddable":true,"href":"https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-json\/wp\/v2\/contributor?post=303"},{"taxonomy":"license","embeddable":true,"href":"https:\/\/ebooks.inflibnet.ac.in\/csp10\/wp-json\/wp\/v2\/license?post=303"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}