aboutsummaryrefslogtreecommitdiff
path: root/21.08/_fold_pad_tests_8cpp.xhtml
blob: fd3846b2987ddaaa11c39fe0e2bf0518232d3b05 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
<!-- Copyright (c) 2020 ARM Limited. -->
<!--                                 -->
<!-- SPDX-License-Identifier: MIT    -->
<!--                                 -->
<!-- HTML header for doxygen 1.8.13-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="robots" content="NOINDEX, NOFOLLOW" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmNN: src/armnn/test/optimizations/FoldPadTests.cpp File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js"],
    jax: ["input/TeX","output/HTML-CSS"],
});
</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="stylesheet.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <img alt="ArmNN" src="Arm_NN_horizontal_blue.png" style="max-width: 10rem; margin-top: .5rem; margin-left 10px"/>
  <td style="padding-left: 0.5em;">
   <div id="projectname">
   &#160;<span id="projectnumber">21.08</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('_fold_pad_tests_8cpp.xhtml','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">FoldPadTests.cpp File Reference</div>  </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &quot;<a class="el" href="_layers_fwd_8hpp_source.xhtml">LayersFwd.hpp</a>&quot;</code><br />
<code>#include &lt;<a class="el" href="_network_8hpp_source.xhtml">Network.hpp</a>&gt;</code><br />
<code>#include &lt;<a class="el" href="_test_utils_8hpp_source.xhtml">test/TestUtils.hpp</a>&gt;</code><br />
<code>#include &lt;doctest/doctest.h&gt;</code><br />
<code>#include &lt;<a class="el" href="_tensor_handle_8hpp_source.xhtml">backendsCommon/TensorHandle.hpp</a>&gt;</code><br />
<code>#include &lt;<a class="el" href="_optimizer_8hpp_source.xhtml">Optimizer.hpp</a>&gt;</code><br />
</div>
<p><a href="_fold_pad_tests_8cpp_source.xhtml">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a77a062dba8ec73047ae4e734519f5ef8"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="_fold_pad_tests_8cpp.xhtml#a77a062dba8ec73047ae4e734519f5ef8">TEST_SUITE</a> (&quot;Optimizer&quot;)</td></tr>
<tr class="separator:a77a062dba8ec73047ae4e734519f5ef8"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Function Documentation</h2>
<a id="a77a062dba8ec73047ae4e734519f5ef8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a77a062dba8ec73047ae4e734519f5ef8">&#9670;&nbsp;</a></span>TEST_SUITE()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">TEST_SUITE </td>
          <td>(</td>
          <td class="paramtype">&quot;Optimizer&quot;&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p class="definition">Definition at line <a class="el" href="_fold_pad_tests_8cpp_source.xhtml#l00013">13</a> of file <a class="el" href="_fold_pad_tests_8cpp_source.xhtml">FoldPadTests.cpp</a>.</p>

<p class="reference">References <a class="el" href="_graph_8hpp_source.xhtml#l00402">Graph::AddLayer()</a>, <a class="el" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021">armnn::Average</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00172">Graph::cbegin()</a>, <a class="el" href="_graph_8hpp_source.xhtml#l00174">Graph::cend()</a>, <a class="el" href="_test_utils_8hpp_source.xhtml#l00021">CheckSequence()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">IOutputSlot::Connect()</a>, <a class="el" href="_layer_8cpp_source.xhtml#l00083">OutputSlot::Connect()</a>, <a class="el" href="_network_8cpp_source.xhtml#l00530">INetwork::Create()</a>, <a class="el" href="namespacearmnn.xhtml#a3888429b6ebc79f9a7df549e5e4d9a2fa843f2812f595e7ec7c5036e89fde02d6">armnn::Exclude</a>, <a class="el" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::Float32</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">IConnectableLayer::GetInputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00316">Layer::GetInputSlot()</a>, <a class="el" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">IConnectableLayer::GetOutputSlot()</a>, <a class="el" href="_layer_8hpp_source.xhtml#l00318">Layer::GetOutputSlot()</a>, <a class="el" href="_layer_with_parameters_8hpp_source.xhtml#l00018">LayerWithParameters&lt; Parameters &gt;::GetParameters()</a>, <a class="el" href="namespacearmnn.xhtml#a3888429b6ebc79f9a7df549e5e4d9a2faad301514192636ad34210adce598a45a">armnn::IgnoreValue</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00466">Convolution2dDescriptor::m_BiasEnabled</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00518">DepthwiseConvolution2dDescriptor::m_BiasEnabled</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00385">Pooling2dDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00468">Convolution2dDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00520">DepthwiseConvolution2dDescriptor::m_DataLayout</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00371">Pooling2dDescriptor::m_PadBottom</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00383">Pooling2dDescriptor::m_PaddingMethod</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00365">Pooling2dDescriptor::m_PadLeft</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00367">Pooling2dDescriptor::m_PadRight</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00369">Pooling2dDescriptor::m_PadTop</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l01015">PadDescriptor::m_PadValue</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00375">Pooling2dDescriptor::m_PoolHeight</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00363">Pooling2dDescriptor::m_PoolType</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00373">Pooling2dDescriptor::m_PoolWidth</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00377">Pooling2dDescriptor::m_StrideX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00458">Convolution2dDescriptor::m_StrideX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00510">DepthwiseConvolution2dDescriptor::m_StrideX</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00379">Pooling2dDescriptor::m_StrideY</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00460">Convolution2dDescriptor::m_StrideY</a>, <a class="el" href="_descriptors_8hpp_source.xhtml#l00512">DepthwiseConvolution2dDescriptor::m_StrideY</a>, <a class="el" href="_depthwise_convolution2d_layer_8hpp_source.xhtml#l00019">DepthwiseConvolution2dLayer::m_Weight</a>, <a class="el" href="_convolution2d_layer_8hpp_source.xhtml#l00020">Convolution2dLayer::m_Weight</a>, <a class="el" href="_optimizer_8hpp_source.xhtml#l00043">armnn::MakeOptimizations()</a>, <a class="el" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718a6a061313d22e51e0f25b7cd4dc065233">armnn::Max</a>, <a class="el" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::NHWC</a>, <a class="el" href="_optimizer_8cpp_source.xhtml#l00016">Optimizer::Pass()</a>, <a class="el" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">IOutputSlot::SetTensorInfo()</a>, and <a class="el" href="_layer_8cpp_source.xhtml#l00058">OutputSlot::SetTensorInfo()</a>.</p>
<div class="fragment"><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;{</div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacearmnn_1_1optimizations.xhtml">armnn::optimizations</a>;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;TEST_CASE(<span class="stringliteral">&quot;FoldPadLayerIntoConvolution2dLayer&quot;</span>)</div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;{</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;    <a class="code" href="classarmnn_1_1_graph.xhtml">Graph</a>              graph;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputShape[]   = {1, 2, 2, 3};</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> paddedShape[]  = {1, 6, 6, 3};</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> weightsShape[] = {1, 2, 3, 3};</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputShape[]  = {1, 2, 1, 1};</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputInfo(4, inputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> paddedInfo(4, paddedShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputInfo(4, outputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;    input-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#a7e5c5771d741dd5473989047a9314728">SetTensorInfo</a>(inputInfo);</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    <a class="code" href="structarmnn_1_1_pad_descriptor.xhtml">PadDescriptor</a> padDescriptor({{0, 0},</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;                                 {2, 2},</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;                                 {2, 2},</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;                                 {0, 0}});</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;    <a class="code" href="classarmnn_1_1_pad_layer.xhtml">PadLayer</a>* padLayer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_pad_layer.xhtml">PadLayer</a>&gt;(padDescriptor, <span class="stringliteral">&quot;pad&quot;</span>);</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    padLayer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#a7e5c5771d741dd5473989047a9314728">SetTensorInfo</a>(paddedInfo);</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    <a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml">Convolution2dDescriptor</a> convolution2dDescriptor;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    convolution2dDescriptor.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;    convolution2dDescriptor.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>     = 1;</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    convolution2dDescriptor.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>     = 1;</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;    convolution2dDescriptor.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>  = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">DataLayout::NHWC</a>;</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    std::vector&lt;float&gt; weightsVector(18);</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;    <a class="code" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a>        weights(<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>(4, weightsShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>), weightsVector);</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;    <a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml">Convolution2dLayer</a>* conv2dLayer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml">Convolution2dLayer</a>&gt;(convolution2dDescriptor, <span class="stringliteral">&quot;conv2d&quot;</span>);</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    conv2dLayer-&gt;<a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml#a6266a703017d7296f87cc4923df2d725">m_Weight</a> = std::make_unique&lt;ScopedTensorHandle&gt;(weights);</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    conv2dLayer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#a7e5c5771d741dd5473989047a9314728">SetTensorInfo</a>(outputInfo);</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    <span class="comment">// Connect up layers - input -&gt; pad -&gt; conv2d -&gt; output</span></div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    input-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#adcfb97035799ea4c043f9ef370714815">Connect</a>(padLayer-&gt;GetInputSlot(0));</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    padLayer-&gt;GetOutputSlot().Connect(conv2dLayer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#acf8b8e23bf647836592982f97088d375">GetInputSlot</a>(0));</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    conv2dLayer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#adcfb97035799ea4c043f9ef370714815">Connect</a>(output-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#acf8b8e23bf647836592982f97088d375">GetInputSlot</a>(0));</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    <span class="keyword">auto</span> checkSimpleConv2d = [](<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> layer)-&gt;<span class="keywordtype">bool</span> {</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;        <span class="keyword">const</span> <span class="keyword">auto</span> conv2dLayer       = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml">Convolution2dLayer</a>*<span class="keyword">&gt;</span>(layer);</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;        <span class="keyword">const</span> <span class="keyword">auto</span> conv2dLayerParams = conv2dLayer-&gt;<a class="code" href="classarmnn_1_1_layer_with_parameters.xhtml#a502c06a1b13e6d90a6cbf47c081f1444">GetParameters</a>();</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;        <span class="keywordflow">return</span> IsLayerOfType&lt;Convolution2dLayer&gt;(layer) &amp;&amp; (layer-&gt;GetNameStr() == <span class="stringliteral">&quot;conv2d&quot;</span>) &amp;&amp;</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;            (conv2dLayerParams.m_PadLeft == 0) &amp;&amp; (conv2dLayerParams.m_PadRight == 0) &amp;&amp;</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;            (conv2dLayerParams.m_PadTop == 0) &amp;&amp; (conv2dLayerParams.m_PadBottom == 0) &amp;&amp;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;            (conv2dLayerParams.m_StrideX == 1) &amp;&amp; (conv2dLayerParams.m_StrideY == 1) &amp;&amp;</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;            (conv2dLayerParams.m_BiasEnabled == <span class="keyword">false</span>) &amp;&amp; (conv2dLayerParams.m_DataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">DataLayout::NHWC</a>);</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    };</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    CHECK(<a class="code" href="_test_utils_8hpp.xhtml#a0eedb278f57355b47fa983450d4e378c">CheckSequence</a>(graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a98b1109a9006f8cc7d4566146a3bd737">cbegin</a>(), graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a02fd29b6dc3e21fbe4484362d85893bc">cend</a>(),</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;                             &amp;IsLayerOfType&lt;InputLayer&gt;,</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;                             &amp;IsLayerOfType&lt;PadLayer&gt;,</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;                             checkSimpleConv2d,</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;                             &amp;IsLayerOfType&lt;OutputLayer&gt;));</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    <a class="code" href="classarmnn_1_1_optimizer.xhtml#a1f48ba622b76ea04d15c9b62f642bf08">armnn::Optimizer::Pass</a>(graph, <a class="code" href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">armnn::MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.xhtml#a8b394ff60ed829a91f07deac476f3db2">FoldPadIntoConvolution2d</a>()));</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    <span class="keyword">auto</span> checkPadFoldedIntoConv2d = [](<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> layer)-&gt;<span class="keywordtype">bool</span> {</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;        <span class="keyword">const</span> <span class="keyword">auto</span> conv2dLayer       = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="classarmnn_1_1_convolution2d_layer.xhtml">Convolution2dLayer</a>*<span class="keyword">&gt;</span>(layer);</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;        <span class="keyword">const</span> <span class="keyword">auto</span> conv2dLayerParams = conv2dLayer-&gt;<a class="code" href="classarmnn_1_1_layer_with_parameters.xhtml#a502c06a1b13e6d90a6cbf47c081f1444">GetParameters</a>();</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;        <span class="keywordflow">return</span> IsLayerOfType&lt;Convolution2dLayer&gt;(layer) &amp;&amp; (layer-&gt;GetNameStr() == <span class="stringliteral">&quot;folded-pad-into-conv2d&quot;</span>) &amp;&amp;</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;            (conv2dLayerParams.m_PadLeft == 2) &amp;&amp; (conv2dLayerParams.m_PadRight == 2) &amp;&amp;</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;            (conv2dLayerParams.m_PadTop == 2) &amp;&amp; (conv2dLayerParams.m_PadBottom == 2) &amp;&amp;</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;            (conv2dLayerParams.m_StrideX == 1) &amp;&amp; (conv2dLayerParams.m_StrideY == 1) &amp;&amp;</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;            (conv2dLayerParams.m_BiasEnabled == <span class="keyword">false</span>) &amp;&amp; (conv2dLayerParams.m_DataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">DataLayout::NHWC</a>);</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    };</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    CHECK(<a class="code" href="_test_utils_8hpp.xhtml#a0eedb278f57355b47fa983450d4e378c">CheckSequence</a>(graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a98b1109a9006f8cc7d4566146a3bd737">cbegin</a>(), graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a02fd29b6dc3e21fbe4484362d85893bc">cend</a>(),</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;                             &amp;IsLayerOfType&lt;InputLayer&gt;,</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;                             checkPadFoldedIntoConv2d,</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;                             &amp;IsLayerOfType&lt;OutputLayer&gt;));</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;}</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;TEST_CASE(<span class="stringliteral">&quot;FoldPadLayerIntoDepthwiseConvolution2dLayer&quot;</span>)</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;{</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    <a class="code" href="classarmnn_1_1_graph.xhtml">Graph</a>              graph;</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputShape[]   = {1, 2, 2, 3};</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> paddedShape[]  = {1, 6, 6, 3};</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> weightsShape[] = {1, 2, 3, 3};</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputShape[]  = {1, 2, 1, 3};</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputInfo(4, inputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> paddedInfo(4, paddedShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputInfo(4, outputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    input-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#a7e5c5771d741dd5473989047a9314728">SetTensorInfo</a>(inputInfo);</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    <a class="code" href="structarmnn_1_1_pad_descriptor.xhtml">PadDescriptor</a> padDescriptor({{0, 0},</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;                                 {2, 2},</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;                                 {2, 2},</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;                                 {0, 0}});</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    <a class="code" href="classarmnn_1_1_pad_layer.xhtml">PadLayer</a>* padLayer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_pad_layer.xhtml">PadLayer</a>&gt;(padDescriptor, <span class="stringliteral">&quot;pad&quot;</span>);</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    padLayer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#a7e5c5771d741dd5473989047a9314728">SetTensorInfo</a>(paddedInfo);</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;    <a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml">DepthwiseConvolution2dDescriptor</a> depthwiseConvolution2dDescriptor;</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;    depthwiseConvolution2dDescriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    depthwiseConvolution2dDescriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>     = 1;</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;    depthwiseConvolution2dDescriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>     = 1;</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;    depthwiseConvolution2dDescriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>  = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">DataLayout::NHWC</a>;</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    std::vector&lt;float&gt; weightsVector(18);</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    <a class="code" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a>        weights(<a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>(4, weightsShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>), weightsVector);</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;    <span class="keyword">auto</span>* depthwiseConv2dLayer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_depthwise_convolution2d_layer.xhtml">DepthwiseConvolution2dLayer</a>&gt;(depthwiseConvolution2dDescriptor,</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;                                                                             <span class="stringliteral">&quot;depthwiseConv2d&quot;</span>);</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    depthwiseConv2dLayer-&gt;<a class="code" href="classarmnn_1_1_depthwise_convolution2d_layer.xhtml#a6266a703017d7296f87cc4923df2d725">m_Weight</a> = std::make_unique&lt;ScopedTensorHandle&gt;(weights);</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;    depthwiseConv2dLayer-&gt;GetOutputSlot().SetTensorInfo(outputInfo);</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;    <span class="comment">// Connect up layers - input -&gt; pad -&gt; depthwiseConv2d -&gt; output</span></div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;    input-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#adcfb97035799ea4c043f9ef370714815">Connect</a>(padLayer-&gt;GetInputSlot(0));</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    padLayer-&gt;GetOutputSlot().Connect(depthwiseConv2dLayer-&gt;GetInputSlot(0));</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    depthwiseConv2dLayer-&gt;GetOutputSlot().Connect(output-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#acf8b8e23bf647836592982f97088d375">GetInputSlot</a>(0));</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;    <span class="keyword">auto</span> checkSimpleDepthwiseConv2d = [](<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> layer)-&gt;<span class="keywordtype">bool</span> {</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;        <span class="keyword">const</span> <span class="keyword">auto</span> depthwiseConv2dLayer       = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="classarmnn_1_1_depthwise_convolution2d_layer.xhtml">DepthwiseConvolution2dLayer</a>*<span class="keyword">&gt;</span>(layer);</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;        <span class="keyword">const</span> <span class="keyword">auto</span> depthwiseConv2dLayerParams = depthwiseConv2dLayer-&gt;<a class="code" href="classarmnn_1_1_layer_with_parameters.xhtml#a502c06a1b13e6d90a6cbf47c081f1444">GetParameters</a>();</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;        <span class="keywordflow">return</span> IsLayerOfType&lt;DepthwiseConvolution2dLayer&gt;(layer) &amp;&amp; (layer-&gt;GetNameStr() == <span class="stringliteral">&quot;depthwiseConv2d&quot;</span>) &amp;&amp;</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;            (depthwiseConv2dLayerParams.m_PadLeft == 0) &amp;&amp; (depthwiseConv2dLayerParams.m_PadRight == 0) &amp;&amp;</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;            (depthwiseConv2dLayerParams.m_PadTop == 0) &amp;&amp; (depthwiseConv2dLayerParams.m_PadBottom == 0) &amp;&amp;</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;            (depthwiseConv2dLayerParams.m_StrideX == 1) &amp;&amp; (depthwiseConv2dLayerParams.m_StrideY == 1) &amp;&amp;</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;            (depthwiseConv2dLayerParams.m_BiasEnabled == <span class="keyword">false</span>) &amp;&amp;</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;            (depthwiseConv2dLayerParams.m_DataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">DataLayout::NHWC</a>);</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;    };</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    CHECK(<a class="code" href="_test_utils_8hpp.xhtml#a0eedb278f57355b47fa983450d4e378c">CheckSequence</a>(graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a98b1109a9006f8cc7d4566146a3bd737">cbegin</a>(), graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a02fd29b6dc3e21fbe4484362d85893bc">cend</a>(),</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;                             &amp;IsLayerOfType&lt;InputLayer&gt;,</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;                             &amp;IsLayerOfType&lt;PadLayer&gt;,</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;                             checkSimpleDepthwiseConv2d,</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;                             &amp;IsLayerOfType&lt;OutputLayer&gt;));</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    <a class="code" href="classarmnn_1_1_optimizer.xhtml#a1f48ba622b76ea04d15c9b62f642bf08">armnn::Optimizer::Pass</a>(graph, <a class="code" href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.xhtml#a227e9ab5e488aa90ba462790ba0e5aec">FoldPadIntoDepthwiseConvolution2d</a>()));</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    <span class="keyword">auto</span> checkPadFoldedIntoDepthwiseConv2d = [](<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> layer)-&gt;<span class="keywordtype">bool</span> {</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;        <span class="keyword">const</span> <span class="keyword">auto</span> depthwiseConv2dLayer       = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="classarmnn_1_1_depthwise_convolution2d_layer.xhtml">DepthwiseConvolution2dLayer</a>*<span class="keyword">&gt;</span>(layer);</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;        <span class="keyword">const</span> <span class="keyword">auto</span> depthwiseConv2dLayerParams = depthwiseConv2dLayer-&gt;<a class="code" href="classarmnn_1_1_layer_with_parameters.xhtml#a502c06a1b13e6d90a6cbf47c081f1444">GetParameters</a>();</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;        <span class="keywordflow">return</span> IsLayerOfType&lt;DepthwiseConvolution2dLayer&gt;(layer) &amp;&amp;</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;            (layer-&gt;GetNameStr() == <span class="stringliteral">&quot;folded-pad-into-depthwiseConv2d&quot;</span>) &amp;&amp;</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;            (depthwiseConv2dLayerParams.m_PadLeft == 2) &amp;&amp; (depthwiseConv2dLayerParams.m_PadRight == 2) &amp;&amp;</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;            (depthwiseConv2dLayerParams.m_PadTop == 2) &amp;&amp; (depthwiseConv2dLayerParams.m_PadBottom == 2) &amp;&amp;</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;            (depthwiseConv2dLayerParams.m_StrideX == 1) &amp;&amp; (depthwiseConv2dLayerParams.m_StrideY == 1) &amp;&amp;</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;            (depthwiseConv2dLayerParams.m_BiasEnabled == <span class="keyword">false</span>) &amp;&amp;</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;            (depthwiseConv2dLayerParams.m_DataLayout == <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">DataLayout::NHWC</a>);</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;    };</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    CHECK(<a class="code" href="_test_utils_8hpp.xhtml#a0eedb278f57355b47fa983450d4e378c">CheckSequence</a>(graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a98b1109a9006f8cc7d4566146a3bd737">cbegin</a>(), graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a02fd29b6dc3e21fbe4484362d85893bc">cend</a>(),</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;                             &amp;IsLayerOfType&lt;InputLayer&gt;,</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;                             checkPadFoldedIntoDepthwiseConv2d,</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;                             &amp;IsLayerOfType&lt;OutputLayer&gt;));</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;}</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;TEST_CASE(<span class="stringliteral">&quot;FoldPadLayerIntoPooling2dLayer&quot;</span>)</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;{</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    <a class="code" href="classarmnn_1_1_graph.xhtml">Graph</a>              graph;</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputShape[]  = {1, 2, 2, 3};</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> paddedShape[] = {1, 4, 4, 3};</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputShape[] = {1, 2, 2, 3};</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputInfo(4, inputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> paddedInfo(4, paddedShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputInfo(4, outputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    input-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#a7e5c5771d741dd5473989047a9314728">SetTensorInfo</a>(inputInfo);</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;    <a class="code" href="structarmnn_1_1_pad_descriptor.xhtml">PadDescriptor</a> padDescriptor({{0, 0},</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;                                 {1, 1},</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;                                 {1, 1},</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;                                 {0, 0}});</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;    <a class="code" href="classarmnn_1_1_pad_layer.xhtml">PadLayer</a>* padLayer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_pad_layer.xhtml">PadLayer</a>&gt;(padDescriptor, <span class="stringliteral">&quot;pad&quot;</span>);</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;    padLayer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#a7e5c5771d741dd5473989047a9314728">SetTensorInfo</a>(paddedInfo);</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;    <a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml">Pooling2dDescriptor</a> pooling2dDescriptor;</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a0031997bf43bd2747656c31e4977793a">m_PoolType</a>   = <a class="code" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021">PoolingAlgorithm::Average</a>;</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6d8fb685cc1ff224f25aa127fcf62c86">m_PoolWidth</a>  = 3;</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a5699e8606c37d18c03910b242cd1b010">m_PoolHeight</a> = 3;</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>    = 1;</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>    = 1;</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">DataLayout::NHWC</a>;</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;    <a class="code" href="classarmnn_1_1_pooling2d_layer.xhtml">Pooling2dLayer</a>* pool2dLayer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_pooling2d_layer.xhtml">Pooling2dLayer</a>&gt;(pooling2dDescriptor, <span class="stringliteral">&quot;pool2d&quot;</span>);</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;    pool2dLayer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#a7e5c5771d741dd5473989047a9314728">SetTensorInfo</a>(outputInfo);</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;    <span class="comment">// Connect up layers - input -&gt; pad -&gt; pool2d -&gt; output</span></div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;    input-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#adcfb97035799ea4c043f9ef370714815">Connect</a>(padLayer-&gt;GetInputSlot(0));</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;    padLayer-&gt;GetOutputSlot().Connect(pool2dLayer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#acf8b8e23bf647836592982f97088d375">GetInputSlot</a>(0));</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;    pool2dLayer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#adcfb97035799ea4c043f9ef370714815">Connect</a>(output-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#acf8b8e23bf647836592982f97088d375">GetInputSlot</a>(0));</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;    <span class="keyword">auto</span> checkSimplePool2d = [&amp;](<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> layer) {</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;        <span class="keyword">const</span> <span class="keyword">auto</span> pool2dLayer = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="classarmnn_1_1_pooling2d_layer.xhtml">Pooling2dLayer</a>*<span class="keyword">&gt;</span>(layer);</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;        <span class="keywordflow">return</span> IsLayerOfType&lt;Pooling2dLayer&gt;(layer) &amp;&amp; (layer-&gt;GetNameStr() == <span class="stringliteral">&quot;pool2d&quot;</span>) &amp;&amp;</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;            (pool2dLayer-&gt;<a class="code" href="classarmnn_1_1_layer_with_parameters.xhtml#a502c06a1b13e6d90a6cbf47c081f1444">GetParameters</a>() == pooling2dDescriptor);</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    };</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;    CHECK(<a class="code" href="_test_utils_8hpp.xhtml#a0eedb278f57355b47fa983450d4e378c">CheckSequence</a>(graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a98b1109a9006f8cc7d4566146a3bd737">cbegin</a>(), graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a02fd29b6dc3e21fbe4484362d85893bc">cend</a>(),</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;                             &amp;IsLayerOfType&lt;InputLayer&gt;,</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;                             &amp;IsLayerOfType&lt;PadLayer&gt;,</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;                             checkSimplePool2d,</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;                             &amp;IsLayerOfType&lt;OutputLayer&gt;));</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;    <a class="code" href="classarmnn_1_1_optimizer.xhtml#a1f48ba622b76ea04d15c9b62f642bf08">armnn::Optimizer::Pass</a>(graph, <a class="code" href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.xhtml#a279d0a7c56966cea334303d48a874964">FoldPadIntoPooling2d</a>()));</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;    <span class="keyword">auto</span> checkPadFoldedIntoPool2d = [&amp;](<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> layer) {</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;        <span class="keywordflow">if</span> (!IsLayerOfType&lt;Pooling2dLayer&gt;(layer) || (layer-&gt;GetNameStr() != <span class="stringliteral">&quot;folded-pad-into-pool2d&quot;</span>))</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;        {</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;        }</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;        <span class="keyword">const</span> <span class="keyword">auto</span>                pool2dLayer       = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="classarmnn_1_1_pooling2d_layer.xhtml">Pooling2dLayer</a>*<span class="keyword">&gt;</span>(layer);</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;        <span class="keyword">const</span> <a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml">Pooling2dDescriptor</a> pool2dLayerParams = pool2dLayer-&gt;<a class="code" href="classarmnn_1_1_layer_with_parameters.xhtml#a502c06a1b13e6d90a6cbf47c081f1444">GetParameters</a>();</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;        <a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml">Pooling2dDescriptor</a> pool2dLayerParamsNoPad = pool2dLayerParams;</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;        pool2dLayerParamsNoPad.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a>       = 0;</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;        pool2dLayerParamsNoPad.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a>      = 0;</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;        pool2dLayerParamsNoPad.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a>        = 0;</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;        pool2dLayerParamsNoPad.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a>     = 0;</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;        <span class="comment">// If we fold then PaddingMethod will be set to Ignore. The original will be Exclude.</span></div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;        pool2dLayerParamsNoPad.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a8c29d6ea9b4186d69aad5961c910939c">m_PaddingMethod</a> = <a class="code" href="namespacearmnn.xhtml#a3888429b6ebc79f9a7df549e5e4d9a2fa843f2812f595e7ec7c5036e89fde02d6">PaddingMethod::Exclude</a>;</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;        <span class="keywordflow">return</span> (pool2dLayerParamsNoPad == pooling2dDescriptor) &amp;&amp; (pool2dLayerParams.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a> == 1) &amp;&amp;</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;            (pool2dLayerParams.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a> == 1) &amp;&amp; (pool2dLayerParams.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a> == 1) &amp;&amp;</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;            (pool2dLayerParams.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a> == 1) &amp;&amp; (pool2dLayerParams.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a8c29d6ea9b4186d69aad5961c910939c">m_PaddingMethod</a> == <a class="code" href="namespacearmnn.xhtml#a3888429b6ebc79f9a7df549e5e4d9a2faad301514192636ad34210adce598a45a">PaddingMethod::IgnoreValue</a>);</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;    };</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;    CHECK(<a class="code" href="_test_utils_8hpp.xhtml#a0eedb278f57355b47fa983450d4e378c">CheckSequence</a>(graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a98b1109a9006f8cc7d4566146a3bd737">cbegin</a>(), graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a02fd29b6dc3e21fbe4484362d85893bc">cend</a>(),</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;                             &amp;IsLayerOfType&lt;InputLayer&gt;,</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;                             checkPadFoldedIntoPool2d,</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;                             &amp;IsLayerOfType&lt;OutputLayer&gt;));</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;}</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;TEST_CASE(<span class="stringliteral">&quot;FoldPadLayerIntoPooling2d_PadWithMultipleOutputsShouldNotBeOptimized&quot;</span>)</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;{</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;    <span class="comment">// In this test case we&#39;ll setup a pad layer with two outputs. One goes to a polling layers and the other</span></div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;    <span class="comment">// goes to an output layer. FoldPadLayerIntoPooling2d should not optimize this graph as it uses the</span></div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;    <span class="comment">// OptimizeForExclusiveConnection method.</span></div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;    <a class="code" href="classarmnn_1_1_graph.xhtml">Graph</a>              graph;</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputShape[]  = {1, 2, 2, 3};</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> paddedShape[] = {1, 4, 4, 3};</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputShape[] = {1, 2, 2, 3};</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputInfo(4, inputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> paddedInfo(4, paddedShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputInfo(4, outputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;    input-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#a7e5c5771d741dd5473989047a9314728">SetTensorInfo</a>(inputInfo);</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;    <a class="code" href="structarmnn_1_1_pad_descriptor.xhtml">PadDescriptor</a> padDescriptor({{0, 0},</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;                                 {1, 1},</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;                                 {1, 1},</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;                                 {0, 0}});</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    <a class="code" href="classarmnn_1_1_pad_layer.xhtml">PadLayer</a>* padLayer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_pad_layer.xhtml">PadLayer</a>&gt;(padDescriptor, <span class="stringliteral">&quot;pad&quot;</span>);</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;    padLayer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#a7e5c5771d741dd5473989047a9314728">SetTensorInfo</a>(paddedInfo);</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;    <a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml">Pooling2dDescriptor</a> pooling2dDescriptor;</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a0031997bf43bd2747656c31e4977793a">m_PoolType</a>   = <a class="code" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021">PoolingAlgorithm::Average</a>;</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6d8fb685cc1ff224f25aa127fcf62c86">m_PoolWidth</a>  = 3;</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a5699e8606c37d18c03910b242cd1b010">m_PoolHeight</a> = 3;</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>    = 1;</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>    = 1;</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">DataLayout::NHWC</a>;</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;    <a class="code" href="classarmnn_1_1_pooling2d_layer.xhtml">Pooling2dLayer</a>* pool2dLayer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_pooling2d_layer.xhtml">Pooling2dLayer</a>&gt;(pooling2dDescriptor, <span class="stringliteral">&quot;pool2d&quot;</span>);</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;    pool2dLayer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#a7e5c5771d741dd5473989047a9314728">SetTensorInfo</a>(outputInfo);</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;    <span class="comment">// Connect up layers - input -&gt; pad -&gt; pool2d -&gt; output</span></div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;    input-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#adcfb97035799ea4c043f9ef370714815">Connect</a>(padLayer-&gt;GetInputSlot(0));</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;    padLayer-&gt;GetOutputSlot().Connect(pool2dLayer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#acf8b8e23bf647836592982f97088d375">GetInputSlot</a>(0));</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;    pool2dLayer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#adcfb97035799ea4c043f9ef370714815">Connect</a>(output-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#acf8b8e23bf647836592982f97088d375">GetInputSlot</a>(0));</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;    <span class="comment">// Add the alternative branch from the pas layer to an output layer.</span></div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* secondOutput = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(1, <span class="stringliteral">&quot;dummy output&quot;</span>);</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    padLayer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#adcfb97035799ea4c043f9ef370714815">Connect</a>(secondOutput-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#acf8b8e23bf647836592982f97088d375">GetInputSlot</a>(0));</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;    <span class="keyword">auto</span> checkSimplePool2d = [&amp;](<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> layer) {</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;        <span class="keyword">const</span> <span class="keyword">auto</span> pool2dLayer = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="classarmnn_1_1_pooling2d_layer.xhtml">Pooling2dLayer</a>*<span class="keyword">&gt;</span>(layer);</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;        <span class="keywordflow">return</span> IsLayerOfType&lt;Pooling2dLayer&gt;(layer) &amp;&amp; (layer-&gt;GetNameStr() == <span class="stringliteral">&quot;pool2d&quot;</span>) &amp;&amp;</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;            (pool2dLayer-&gt;<a class="code" href="classarmnn_1_1_layer_with_parameters.xhtml#a502c06a1b13e6d90a6cbf47c081f1444">GetParameters</a>() == pooling2dDescriptor);</div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;    };</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;    <span class="comment">// Initial sequence.</span></div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;    CHECK(<a class="code" href="_test_utils_8hpp.xhtml#a0eedb278f57355b47fa983450d4e378c">CheckSequence</a>(graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a98b1109a9006f8cc7d4566146a3bd737">cbegin</a>(), graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a02fd29b6dc3e21fbe4484362d85893bc">cend</a>(),</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;                             &amp;IsLayerOfType&lt;InputLayer&gt;,</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;                             &amp;IsLayerOfType&lt;PadLayer&gt;,</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;                             checkSimplePool2d,</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;                             &amp;IsLayerOfType&lt;OutputLayer&gt;,</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;                             &amp;IsLayerOfType&lt;OutputLayer&gt;));</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;    <a class="code" href="classarmnn_1_1_optimizer.xhtml#a1f48ba622b76ea04d15c9b62f642bf08">armnn::Optimizer::Pass</a>(graph, <a class="code" href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.xhtml#a279d0a7c56966cea334303d48a874964">FoldPadIntoPooling2d</a>()));</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;    <span class="comment">// The network should not change.</span></div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;    CHECK(<a class="code" href="_test_utils_8hpp.xhtml#a0eedb278f57355b47fa983450d4e378c">CheckSequence</a>(graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a98b1109a9006f8cc7d4566146a3bd737">cbegin</a>(), graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a02fd29b6dc3e21fbe4484362d85893bc">cend</a>(),</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;                             &amp;IsLayerOfType&lt;InputLayer&gt;,</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;                             &amp;IsLayerOfType&lt;PadLayer&gt;,</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;                             checkSimplePool2d,</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;                             &amp;IsLayerOfType&lt;OutputLayer&gt;,</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;                             &amp;IsLayerOfType&lt;OutputLayer&gt;));</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;}</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;TEST_CASE(<span class="stringliteral">&quot;FoldPadLayerIntoPooling2dLayer_PoolingLayerWithExcludePaddingShouldNotTakeMorePadding&quot;</span>)</div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;{</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;    <span class="comment">// In this test setup input, Pad layer, Pooling layer that includes padding, output layer. The optimization</span></div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;    <span class="comment">// should not work as the pooling layer already includes and existing pad and specifies PaddingMethod::Exclude.</span></div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;    <a class="code" href="classarmnn_1_1_graph.xhtml">Graph</a>              graph;</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputShape[]  = {1, 2, 2, 3};</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> paddedShape[] = {1, 4, 4, 3};</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputShape[] = {1, 2, 2, 3};</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputInfo(4, inputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> paddedInfo(4, paddedShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputInfo(4, outputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;    input-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#a7e5c5771d741dd5473989047a9314728">SetTensorInfo</a>(inputInfo);</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;    <a class="code" href="structarmnn_1_1_pad_descriptor.xhtml">PadDescriptor</a> padDescriptor({{0, 0},</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;                                 {1, 1},</div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;                                 {1, 1},</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;                                 {0, 0}});</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;    <a class="code" href="classarmnn_1_1_pad_layer.xhtml">PadLayer</a>* padLayer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_pad_layer.xhtml">PadLayer</a>&gt;(padDescriptor, <span class="stringliteral">&quot;pad&quot;</span>);</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;    padLayer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#a7e5c5771d741dd5473989047a9314728">SetTensorInfo</a>(paddedInfo);</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;    <a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml">Pooling2dDescriptor</a> pooling2dDescriptor;</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a0031997bf43bd2747656c31e4977793a">m_PoolType</a>      = <a class="code" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021">PoolingAlgorithm::Average</a>;</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6d8fb685cc1ff224f25aa127fcf62c86">m_PoolWidth</a>     = 3;</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a5699e8606c37d18c03910b242cd1b010">m_PoolHeight</a>    = 3;</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>       = 1;</div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>       = 1;</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>    = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">DataLayout::NHWC</a>;</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;    <span class="comment">// Include a pad with the pooling layer. This should prevent the optimization working.</span></div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">m_PadLeft</a>       = 1;</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">m_PadRight</a>      = 1;</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">m_PadTop</a>        = 1;</div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">m_PadBottom</a>     = 1;</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a8c29d6ea9b4186d69aad5961c910939c">m_PaddingMethod</a> = <a class="code" href="namespacearmnn.xhtml#a3888429b6ebc79f9a7df549e5e4d9a2fa843f2812f595e7ec7c5036e89fde02d6">PaddingMethod::Exclude</a>;</div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;</div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;    <a class="code" href="classarmnn_1_1_pooling2d_layer.xhtml">Pooling2dLayer</a>* pool2dLayer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_pooling2d_layer.xhtml">Pooling2dLayer</a>&gt;(pooling2dDescriptor, <span class="stringliteral">&quot;pool2d&quot;</span>);</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;    pool2dLayer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#a7e5c5771d741dd5473989047a9314728">SetTensorInfo</a>(outputInfo);</div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;    <span class="comment">// Connect up layers - input -&gt; pad -&gt; pool2d -&gt; output</span></div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;    input-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#adcfb97035799ea4c043f9ef370714815">Connect</a>(padLayer-&gt;GetInputSlot(0));</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;    padLayer-&gt;GetOutputSlot().Connect(pool2dLayer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#acf8b8e23bf647836592982f97088d375">GetInputSlot</a>(0));</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;    pool2dLayer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#adcfb97035799ea4c043f9ef370714815">Connect</a>(output-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#acf8b8e23bf647836592982f97088d375">GetInputSlot</a>(0));</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;    <span class="keyword">auto</span> checkSimplePool2d = [&amp;](<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> layer) {</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;        <span class="keyword">const</span> <span class="keyword">auto</span> pool2dLayer = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="classarmnn_1_1_pooling2d_layer.xhtml">Pooling2dLayer</a>*<span class="keyword">&gt;</span>(layer);</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;        <span class="keywordflow">return</span> IsLayerOfType&lt;Pooling2dLayer&gt;(layer) &amp;&amp; (layer-&gt;GetNameStr() == <span class="stringliteral">&quot;pool2d&quot;</span>) &amp;&amp;</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;            (pool2dLayer-&gt;<a class="code" href="classarmnn_1_1_layer_with_parameters.xhtml#a502c06a1b13e6d90a6cbf47c081f1444">GetParameters</a>() == pooling2dDescriptor);</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;    };</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;</div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;    CHECK(<a class="code" href="_test_utils_8hpp.xhtml#a0eedb278f57355b47fa983450d4e378c">CheckSequence</a>(graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a98b1109a9006f8cc7d4566146a3bd737">cbegin</a>(), graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a02fd29b6dc3e21fbe4484362d85893bc">cend</a>(),</div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;                             &amp;IsLayerOfType&lt;InputLayer&gt;,</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;                             &amp;IsLayerOfType&lt;PadLayer&gt;,</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;                             checkSimplePool2d,</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;                             &amp;IsLayerOfType&lt;OutputLayer&gt;));</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;    <a class="code" href="classarmnn_1_1_optimizer.xhtml#a1f48ba622b76ea04d15c9b62f642bf08">armnn::Optimizer::Pass</a>(graph, <a class="code" href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.xhtml#a279d0a7c56966cea334303d48a874964">FoldPadIntoPooling2d</a>()));</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;    <span class="comment">// The optimization should not have modified the graph.</span></div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;    CHECK(<a class="code" href="_test_utils_8hpp.xhtml#a0eedb278f57355b47fa983450d4e378c">CheckSequence</a>(graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a98b1109a9006f8cc7d4566146a3bd737">cbegin</a>(), graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a02fd29b6dc3e21fbe4484362d85893bc">cend</a>(),</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;                             &amp;IsLayerOfType&lt;InputLayer&gt;,</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;                             &amp;IsLayerOfType&lt;PadLayer&gt;,</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;                             checkSimplePool2d,</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;                             &amp;IsLayerOfType&lt;OutputLayer&gt;));</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;}</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;TEST_CASE(<span class="stringliteral">&quot;FoldPadLayerIntoPooling2dLayer_MaxPoolingLayerWithLargePadValueShouldNotBeFolded&quot;</span>)</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;{</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;    <span class="comment">// In this test setup input, Pad layer with a large pad value, Max Pooling layer, output layer. The optimization</span></div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;    <span class="comment">// should not work as the pad value will modify the result of the max pooling layer.</span></div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;    <a class="code" href="classarmnn_1_1_graph.xhtml">Graph</a>              graph;</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputShape[]  = {1, 2, 2, 3};</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> paddedShape[] = {1, 4, 4, 3};</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputShape[] = {1, 2, 2, 3};</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputInfo(4, inputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> paddedInfo(4, paddedShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;    <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputInfo(4, outputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;</div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* input = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_input_layer.xhtml">InputLayer</a>&gt;(0, <span class="stringliteral">&quot;input&quot;</span>);</div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;    input-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#a7e5c5771d741dd5473989047a9314728">SetTensorInfo</a>(inputInfo);</div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;</div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;    <a class="code" href="structarmnn_1_1_pad_descriptor.xhtml">PadDescriptor</a> padDescriptor({{0, 0},</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;                                 {1, 1},</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;                                 {1, 1},</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;                                 {0, 0}});</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;    <span class="comment">// For Max pooling of a float a pad value of 0 is more than enough to stop the fold happening.</span></div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;    <span class="comment">// Set this to -std::numeric_limits&lt;float&gt;::infinity() to make the fold happen.</span></div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;    padDescriptor.m_PadValue = 0;</div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;    <a class="code" href="classarmnn_1_1_pad_layer.xhtml">PadLayer</a>* padLayer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_pad_layer.xhtml">PadLayer</a>&gt;(padDescriptor, <span class="stringliteral">&quot;pad&quot;</span>);</div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;    padLayer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#a7e5c5771d741dd5473989047a9314728">SetTensorInfo</a>(paddedInfo);</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;    <a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml">Pooling2dDescriptor</a> pooling2dDescriptor;</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a0031997bf43bd2747656c31e4977793a">m_PoolType</a>   = <a class="code" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718a6a061313d22e51e0f25b7cd4dc065233">PoolingAlgorithm::Max</a>;</div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6d8fb685cc1ff224f25aa127fcf62c86">m_PoolWidth</a>  = 3;</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a5699e8606c37d18c03910b242cd1b010">m_PoolHeight</a> = 3;</div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>    = 1;</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>    = 1;</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;    pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">DataLayout::NHWC</a>;</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;    <a class="code" href="classarmnn_1_1_pooling2d_layer.xhtml">Pooling2dLayer</a>* pool2dLayer = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_pooling2d_layer.xhtml">Pooling2dLayer</a>&gt;(pooling2dDescriptor, <span class="stringliteral">&quot;pool2d&quot;</span>);</div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;    pool2dLayer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#a7e5c5771d741dd5473989047a9314728">SetTensorInfo</a>(outputInfo);</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;    <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* output = graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">AddLayer</a>&lt;<a class="code" href="classarmnn_1_1_output_layer.xhtml">OutputLayer</a>&gt;(0, <span class="stringliteral">&quot;output&quot;</span>);</div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;    <span class="comment">// Connect up layers - input -&gt; pad -&gt; pool2d -&gt; output</span></div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;    input-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#adcfb97035799ea4c043f9ef370714815">Connect</a>(padLayer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#acf8b8e23bf647836592982f97088d375">GetInputSlot</a>(0));</div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;    padLayer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#adcfb97035799ea4c043f9ef370714815">Connect</a>(pool2dLayer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#acf8b8e23bf647836592982f97088d375">GetInputSlot</a>(0));</div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;    pool2dLayer-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">GetOutputSlot</a>().<a class="code" href="classarmnn_1_1_output_slot.xhtml#adcfb97035799ea4c043f9ef370714815">Connect</a>(output-&gt;<a class="code" href="classarmnn_1_1_layer.xhtml#acf8b8e23bf647836592982f97088d375">GetInputSlot</a>(0));</div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;    <span class="keyword">auto</span> checkSimplePool2d = [&amp;](<span class="keyword">const</span> <a class="code" href="classarmnn_1_1_layer.xhtml">Layer</a>* <span class="keyword">const</span> layer) {</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;        <span class="keyword">const</span> <span class="keyword">auto</span> pool2dLayer = <span class="keyword">static_cast&lt;</span><span class="keyword">const </span><a class="code" href="classarmnn_1_1_pooling2d_layer.xhtml">Pooling2dLayer</a>*<span class="keyword">&gt;</span>(layer);</div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;        <span class="keywordflow">return</span> IsLayerOfType&lt;Pooling2dLayer&gt;(layer) &amp;&amp; (layer-&gt;GetNameStr() == <span class="stringliteral">&quot;pool2d&quot;</span>) &amp;&amp;</div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;            (pool2dLayer-&gt;<a class="code" href="classarmnn_1_1_layer_with_parameters.xhtml#a502c06a1b13e6d90a6cbf47c081f1444">GetParameters</a>() == pooling2dDescriptor);</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;    };</div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;</div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;    CHECK(<a class="code" href="_test_utils_8hpp.xhtml#a0eedb278f57355b47fa983450d4e378c">CheckSequence</a>(graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a98b1109a9006f8cc7d4566146a3bd737">cbegin</a>(), graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a02fd29b6dc3e21fbe4484362d85893bc">cend</a>(),</div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;                             &amp;IsLayerOfType&lt;InputLayer&gt;,</div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;                             &amp;IsLayerOfType&lt;PadLayer&gt;,</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;                             checkSimplePool2d,</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;                             &amp;IsLayerOfType&lt;OutputLayer&gt;));</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;</div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;    <a class="code" href="classarmnn_1_1_optimizer.xhtml#a1f48ba622b76ea04d15c9b62f642bf08">armnn::Optimizer::Pass</a>(graph, <a class="code" href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">MakeOptimizations</a>(<a class="code" href="namespacearmnn_1_1optimizations.xhtml#a279d0a7c56966cea334303d48a874964">FoldPadIntoPooling2d</a>()));</div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;</div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;    <span class="comment">// The optimization should not have modified the graph.</span></div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;    CHECK(<a class="code" href="_test_utils_8hpp.xhtml#a0eedb278f57355b47fa983450d4e378c">CheckSequence</a>(graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a98b1109a9006f8cc7d4566146a3bd737">cbegin</a>(), graph.<a class="code" href="classarmnn_1_1_graph.xhtml#a02fd29b6dc3e21fbe4484362d85893bc">cend</a>(),</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;                             &amp;IsLayerOfType&lt;InputLayer&gt;,</div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;                             &amp;IsLayerOfType&lt;PadLayer&gt;,</div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;                             checkSimplePool2d,</div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;                             &amp;IsLayerOfType&lt;OutputLayer&gt;));</div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;}</div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;</div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;<span class="preprocessor">#if defined(ARMNNREF_ENABLED)</span></div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;TEST_CASE(<span class="stringliteral">&quot;FoldPadLayerIntoPooling2dLayer_ExecuteInferenceWithAndWithoutOptimization&quot;</span>)</div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;{</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;    <span class="comment">// The idea of this test to run a simple pad+pool2d network twice. Once</span></div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;    <span class="comment">// with FoldPadLayerIntoPooling2dLayer enabled and a second time with it</span></div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;    <span class="comment">// avoided. The output tensors of each should match.</span></div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputShape[]  = {1, 4, 4, 2};</div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> paddedShape[] = {1, 6, 6, 2};</div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputShape[] = {1, 4, 4, 2};</div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;    std::vector&lt;float&gt; inputData({2.0f, 2.0f, 6.0f, 6.0f,</div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;                                  4.0f, 4.0f, 8.0f, 8.0f,</div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;                                  10.0f, 12.0f, 14.0f, 16.0f,</div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;                                  10.0f, 12.0f, 16.0f, 14.0f,</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;</div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;                                  18.0f, 20.0f, 24.0f, 22.0f,</div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;                                  20.0f, 18.0f, 22.0f, 24.0f,</div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;                                  26.0f, 28.0f, 0.0f, 0.0f,</div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;                                  26.0f, 28.0f, 0.0f, 0.0f,</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;                                 });</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;    <span class="keywordflow">try</span></div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;    {</div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;        <span class="comment">// Create a network of input, pad, pooling 2D, output.</span></div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">INetworkPtr</a> network = <a class="code" href="classarmnn_1_1_i_network.xhtml#a464f0ff87b1aabf71febaa71321dd40b">INetwork::Create</a>();</div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;</div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;        <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* inputLayer = network-&gt;AddInputLayer(0);</div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputInfo(4, inputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;        inputLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(inputInfo);</div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;        <a class="code" href="structarmnn_1_1_pad_descriptor.xhtml">PadDescriptor</a> padDescriptor({{0, 0},</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;                                     {1, 1},</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;                                     {1, 1},</div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;                                     {0, 0}});</div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;        <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* padLayer = network-&gt;AddPadLayer(padDescriptor, <span class="stringliteral">&quot;Pad&quot;</span>);</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> paddedInfo(4, paddedShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;        padLayer-&gt;GetOutputSlot(0).SetTensorInfo(paddedInfo);</div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;</div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;        <a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml">Pooling2dDescriptor</a> pooling2dDescriptor;</div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;        pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a0031997bf43bd2747656c31e4977793a">m_PoolType</a>   = <a class="code" href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021">PoolingAlgorithm::Average</a>;</div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;        pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6d8fb685cc1ff224f25aa127fcf62c86">m_PoolWidth</a>  = 3;</div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;        pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a5699e8606c37d18c03910b242cd1b010">m_PoolHeight</a> = 3;</div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;        pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>    = 1;</div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;        pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>    = 1;</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;        pooling2dDescriptor.<a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a> = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">DataLayout::NHWC</a>;</div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;        <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* pool2dLayer = network-&gt;AddPooling2dLayer(pooling2dDescriptor, <span class="stringliteral">&quot;Pool2D&quot;</span>);</div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputInfo(4, outputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;        pool2dLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(outputInfo);</div><div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;</div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;        <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* outputLayer = network-&gt;AddOutputLayer(0);</div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;</div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;        <span class="comment">// Connect layers</span></div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;        inputLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(padLayer-&gt;GetInputSlot(0));</div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;        padLayer-&gt;GetOutputSlot(0).Connect(pool2dLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;        pool2dLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(outputLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;</div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;        <span class="comment">// Create ArmNN runtime</span></div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;        <a class="code" href="namespacearmnn.xhtml#a150468a02bd7b2d2d061c4aaaee939f0">IRuntimePtr</a>          run              = <a class="code" href="classarmnn_1_1_i_runtime.xhtml#ad44ecd3700748dc30dc4bbe34ba5bde7">IRuntime::Create</a>(<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml">IRuntime::CreationOptions</a>());    <span class="comment">// default options</span></div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;        <span class="comment">// Optimise the network</span></div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;        <a class="code" href="namespacearmnn.xhtml#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a> optimizedNetwork = <a class="code" href="namespacearmnn.xhtml#a82e98ef05fd67036d1195ba17174d685">Optimize</a>(*network, {<a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">Compute::CpuRef</a>}, run-&gt;GetDeviceSpec());</div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;        <span class="comment">// Load network into runtime</span></div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;        <a class="code" href="namespacearmnn.xhtml#a0d8160388a127c1a23b37bc88dc6e2ec">NetworkId</a>            networkIdentifier;</div><div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;        CHECK(run-&gt;LoadNetwork(networkIdentifier, std::move(optimizedNetwork)) == <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">Status::Success</a>);</div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;</div><div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;        <a class="code" href="namespacearmnn.xhtml#aa01bce88f89975a5a031db4cc8861527">InputTensors</a> inputTensors{{0, <a class="code" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a>(run-&gt;GetInputTensorInfo(networkIdentifier, 0), inputData.data())}};</div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;</div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;        <span class="comment">// Set the initial values of the data to different values to the golden data just in case the inference fails.</span></div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;        std::vector&lt;float&gt; optimizedData(32, -std::numeric_limits&lt;float&gt;::infinity());</div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;        <a class="code" href="namespacearmnn.xhtml#a8f091a512915d1cb29a4ebf13dfc53ea">OutputTensors</a>      outputTensors{{0, <a class="code" href="classarmnn_1_1_tensor.xhtml">Tensor</a>(outputInfo, optimizedData.data())}};</div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;        <span class="comment">// Execute network</span></div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;        run-&gt;EnqueueWorkload(networkIdentifier, inputTensors, outputTensors);</div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;        <span class="comment">// Unload it.</span></div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;        run-&gt;UnloadNetwork(networkIdentifier);</div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;</div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;        <span class="comment">// In this second case the pad will have two outputs, one connected to the pooling layer the second connected to</span></div><div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;        <span class="comment">// a second output layer. This will prevent the FoldPadLayerIntoPooling2dLayer optimization from working.</span></div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;        <span class="comment">// A previous test, FoldPadLayerIntoPooling2d_PadWithMultipleOutputsShouldNotBeOptimized, has proved that doing</span></div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;        <span class="comment">// this will avoid the optimization.</span></div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;        <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* dummyOutputLayer = network-&gt;AddOutputLayer(1);</div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;        padLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(dummyOutputLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;</div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;        <span class="comment">// Optimize and load and execute it a second time.</span></div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;        optimizedNetwork = <a class="code" href="namespacearmnn.xhtml#a82e98ef05fd67036d1195ba17174d685">Optimize</a>(*network, {<a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">Compute::CpuRef</a>}, run-&gt;GetDeviceSpec());</div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;        CHECK(run-&gt;LoadNetwork(networkIdentifier, std::move(optimizedNetwork)) == <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">Status::Success</a>);</div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;        std::vector&lt;float&gt; goldenData(32, 0.0f);</div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;        std::vector&lt;float&gt; padOutputData(72, 0.0f);</div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;        <a class="code" href="namespacearmnn.xhtml#a8f091a512915d1cb29a4ebf13dfc53ea">OutputTensors</a>      goldenTensors{{0, <a class="code" href="classarmnn_1_1_tensor.xhtml">Tensor</a>(outputInfo, goldenData.data())},</div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;                                         {1, <a class="code" href="classarmnn_1_1_tensor.xhtml">Tensor</a>(paddedInfo, padOutputData.data())}};</div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;        run-&gt;EnqueueWorkload(networkIdentifier, inputTensors, goldenTensors);</div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;</div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;        <span class="comment">// Now we can compare goldenData against optimizedData. They should be the same.</span></div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;        CHECK(std::equal(goldenData.begin(), goldenData.end(), optimizedData.begin()));</div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;    }</div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;    <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception&amp; e)</div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;    {</div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;        std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;</div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;        <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, e.what());</div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;    }</div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;}</div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;</div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;TEST_CASE(<span class="stringliteral">&quot;FoldPadLayerIntoConv2dLayer_ExecuteInferenceWithAndWithoutOptimization&quot;</span>)</div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;{</div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;    <span class="comment">// The idea of this test to run a simple pad+conv2d network twice. Once</span></div><div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;    <span class="comment">// with FoldPadLayerIntoConv2dLayer enabled and a second time with it</span></div><div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;    <span class="comment">// avoided. The output tensors of each should match.</span></div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputShape[]   = {1, 4, 4, 3}; <span class="comment">// NHWCin</span></div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> paddedShape[]  = {1, 6, 6, 3};</div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> weightsShape[] = {4, 2, 2, 3}; <span class="comment">// CoutHWCin</span></div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputShape[]  = {1, 5, 5, 4}; <span class="comment">// NHWCout</span></div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;</div><div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;    std::vector&lt;float&gt; inputData({2.0f, 2.0f, 6.0f, 6.0f,</div><div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;                                  4.0f, 4.0f, 8.0f, 8.0f,</div><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;                                  10.0f, 12.0f, 14.0f, 16.0f,</div><div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;                                  10.0f, 12.0f, 16.0f, 14.0f,</div><div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;</div><div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;                                  18.0f, 20.0f, 24.0f, 22.0f,</div><div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;                                  20.0f, 18.0f, 22.0f, 24.0f,</div><div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;                                  26.0f, 28.0f, 0.0f, 0.0f,</div><div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;                                  26.0f, 28.0f, 0.0f, 0.0f,</div><div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;</div><div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;                                  2.0f, 2.0f, 6.0f, 6.0f,</div><div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;                                  4.0f, 4.0f, 8.0f, 8.0f,</div><div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;                                  10.0f, 12.0f, 14.0f, 16.0f,</div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;                                  10.0f, 12.0f, 16.0f, 14.0f,</div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;                                 });</div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;    <span class="keywordflow">try</span></div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;    {</div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;        <span class="comment">// Create a network of input, pad, pooling 2D, output.</span></div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">INetworkPtr</a> network = <a class="code" href="classarmnn_1_1_i_network.xhtml#a464f0ff87b1aabf71febaa71321dd40b">INetwork::Create</a>();</div><div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;</div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;        <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* inputLayer = network-&gt;AddInputLayer(0);</div><div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputInfo(4, inputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;        inputLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(inputInfo);</div><div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;</div><div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;        <a class="code" href="structarmnn_1_1_pad_descriptor.xhtml">PadDescriptor</a> padDescriptor({{0, 0},</div><div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;                                     {1, 1},</div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;                                     {1, 1},</div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;                                     {0, 0}});</div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;        <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* padLayer = network-&gt;AddPadLayer(padDescriptor, <span class="stringliteral">&quot;Pad&quot;</span>);</div><div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> paddedInfo(4, paddedShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;        padLayer-&gt;GetOutputSlot(0).SetTensorInfo(paddedInfo);</div><div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;</div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;        <a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml">Convolution2dDescriptor</a> convDescriptor;</div><div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;        convDescriptor.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>  = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">DataLayout::NHWC</a>;</div><div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;        convDescriptor.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>     = 1;</div><div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;        convDescriptor.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>     = 1;</div><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;        convDescriptor.<a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;</div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;        std::vector&lt;float&gt;    weightsData  = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,</div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;                                              11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,</div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;                                              21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,</div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;                                              31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42};</div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>            weightsInfo(4, weightsShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;        <a class="code" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a>           weights(weightsInfo, weightsData);</div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;        std::vector&lt;float&gt;    biasVector   = {5, 6, 7, 8};</div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>            biasInfo({4}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;        <a class="code" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a>           bias(biasInfo, biasVector);</div><div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;        <a class="code" href="classarmnn_1_1_optional.xhtml">Optional&lt;ConstTensor&gt;</a> optionalBias = <a class="code" href="classarmnn_1_1_optional.xhtml">Optional&lt;ConstTensor&gt;</a>(bias);</div><div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;</div><div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;        <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* conv2dLayer = network-&gt;AddConvolution2dLayer(convDescriptor,</div><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;                                                                        weights,</div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;                                                                        optionalBias,</div><div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;                                                                        <span class="stringliteral">&quot;Conv2D&quot;</span>);</div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;</div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputInfo(4, outputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;        conv2dLayer-&gt;GetOutputSlot(0).SetTensorInfo(outputInfo);</div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;</div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;        <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* outputLayer = network-&gt;AddOutputLayer(0);</div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;</div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;        <span class="comment">// Connect layers</span></div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;        inputLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(padLayer-&gt;GetInputSlot(0));</div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;        padLayer-&gt;GetOutputSlot(0).Connect(conv2dLayer-&gt;GetInputSlot(0));</div><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;        conv2dLayer-&gt;GetOutputSlot(0).Connect(outputLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;</div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;        <span class="comment">// Create ArmNN runtime</span></div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;        <a class="code" href="namespacearmnn.xhtml#a150468a02bd7b2d2d061c4aaaee939f0">IRuntimePtr</a>          run              = <a class="code" href="classarmnn_1_1_i_runtime.xhtml#ad44ecd3700748dc30dc4bbe34ba5bde7">IRuntime::Create</a>(<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml">IRuntime::CreationOptions</a>());    <span class="comment">// default options</span></div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;        <span class="comment">// Optimise the network</span></div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;        <a class="code" href="namespacearmnn.xhtml#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a> optimizedNetwork = <a class="code" href="namespacearmnn.xhtml#a82e98ef05fd67036d1195ba17174d685">Optimize</a>(*network, {<a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">Compute::CpuRef</a>}, run-&gt;GetDeviceSpec());</div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;        <span class="comment">// Load network into runtime</span></div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;        <a class="code" href="namespacearmnn.xhtml#a0d8160388a127c1a23b37bc88dc6e2ec">NetworkId</a>            networkIdentifier;</div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;        CHECK(run-&gt;LoadNetwork(networkIdentifier, std::move(optimizedNetwork)) == <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">Status::Success</a>);</div><div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;</div><div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;        <a class="code" href="namespacearmnn.xhtml#aa01bce88f89975a5a031db4cc8861527">InputTensors</a> inputTensors{{0, <a class="code" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a>(run-&gt;GetInputTensorInfo(networkIdentifier, 0), inputData.data())}};</div><div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;</div><div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;        <span class="comment">// Set the initial values of the data to different values to the golden data just in case the inference fails.</span></div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;        std::vector&lt;float&gt; optimizedData(100, -std::numeric_limits&lt;float&gt;::infinity());</div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;        <a class="code" href="namespacearmnn.xhtml#a8f091a512915d1cb29a4ebf13dfc53ea">OutputTensors</a>      outputTensors{{0, <a class="code" href="classarmnn_1_1_tensor.xhtml">Tensor</a>(outputInfo, optimizedData.data())}};</div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;        <span class="comment">// Execute network</span></div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;        run-&gt;EnqueueWorkload(networkIdentifier, inputTensors, outputTensors);</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;        <span class="comment">// Unload it.</span></div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;        run-&gt;UnloadNetwork(networkIdentifier);</div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;</div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;        <span class="comment">// In this second case the pad will have two outputs, one connected to the conv layer the second connected to</span></div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;        <span class="comment">// a second output layer. This will prevent the FoldPadLayerIntoConv2dLayer optimization from working.</span></div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;        <span class="comment">// A previous test, FoldPadLayerIntoConv2d_PadWithMultipleOutputsShouldNotBeOptimized, has proved that doing</span></div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;        <span class="comment">// this will avoid the optimization.</span></div><div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;        <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* dummyOutputLayer = network-&gt;AddOutputLayer(1);</div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;        padLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(dummyOutputLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;</div><div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;        <span class="comment">// Optimize and load and execute it a second time.</span></div><div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;        optimizedNetwork = <a class="code" href="namespacearmnn.xhtml#a82e98ef05fd67036d1195ba17174d685">Optimize</a>(*network, {<a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">Compute::CpuRef</a>}, run-&gt;GetDeviceSpec());</div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;        CHECK(run-&gt;LoadNetwork(networkIdentifier, std::move(optimizedNetwork)) == <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">Status::Success</a>);</div><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;        std::vector&lt;float&gt; goldenData(100, 0.0f);</div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;        std::vector&lt;float&gt; padOutputData(108, 0.0f);</div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;        <a class="code" href="namespacearmnn.xhtml#a8f091a512915d1cb29a4ebf13dfc53ea">OutputTensors</a>      goldenTensors{{0, <a class="code" href="classarmnn_1_1_tensor.xhtml">Tensor</a>(outputInfo, goldenData.data())},</div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;                                         {1, <a class="code" href="classarmnn_1_1_tensor.xhtml">Tensor</a>(paddedInfo, padOutputData.data())}};</div><div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;        run-&gt;EnqueueWorkload(networkIdentifier, inputTensors, goldenTensors);</div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;</div><div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;        <span class="comment">// Now we can compare goldenData against optimizedData. They should be the same.</span></div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;        CHECK(std::equal(goldenData.begin(), goldenData.end(), optimizedData.begin()));</div><div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;    }</div><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;    <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception&amp; e)</div><div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;    {</div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;        std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;</div><div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;        <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, e.what());</div><div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;    }</div><div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;}</div><div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;</div><div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;TEST_CASE(<span class="stringliteral">&quot;FoldPadLayerIntoDepthwiseConv2dLayer_ExecuteInferenceWithAndWithoutOptimization&quot;</span>)</div><div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;{</div><div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;    <span class="comment">// The idea of this test to run a simple pad+depthwiseconv2d network twice. Once</span></div><div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;    <span class="comment">// with FoldPadLayerIntoDeptwiseConv2dLayer enabled and a second time with it</span></div><div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;    <span class="comment">// avoided. The output tensors of each should match.</span></div><div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> inputShape[]   = {1, 4, 4, 3}; <span class="comment">// NHWCin</span></div><div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> paddedShape[]  = {1, 6, 6, 3};</div><div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> weightsShape[] = {1, 2, 2, 12};  <span class="comment">// 1HWCout</span></div><div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> outputShape[]  = {1, 5, 5, 12}; <span class="comment">// NHWCout</span></div><div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;</div><div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;    std::vector&lt;float&gt; inputData({2.0f, 2.0f, 6.0f, 6.0f,</div><div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;                                  4.0f, 4.0f, 8.0f, 8.0f,</div><div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;                                  10.0f, 12.0f, 14.0f, 16.0f,</div><div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;                                  10.0f, 12.0f, 16.0f, 14.0f,</div><div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;</div><div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;                                  18.0f, 20.0f, 24.0f, 22.0f,</div><div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;                                  20.0f, 18.0f, 22.0f, 24.0f,</div><div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;                                  26.0f, 28.0f, 0.0f, 0.0f,</div><div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;                                  26.0f, 28.0f, 0.0f, 0.0f,</div><div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;</div><div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;                                  2.0f, 2.0f, 6.0f, 6.0f,</div><div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;                                  4.0f, 4.0f, 8.0f, 8.0f,</div><div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;                                  10.0f, 12.0f, 14.0f, 16.0f,</div><div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;                                  10.0f, 12.0f, 16.0f, 14.0f,</div><div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;                                 });</div><div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;    <span class="keywordflow">try</span></div><div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;    {</div><div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;        <span class="comment">// Create a network of input, pad, pooling 2D, output.</span></div><div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">INetworkPtr</a> network = <a class="code" href="classarmnn_1_1_i_network.xhtml#a464f0ff87b1aabf71febaa71321dd40b">INetwork::Create</a>();</div><div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;</div><div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;        <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* inputLayer = network-&gt;AddInputLayer(0);</div><div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> inputInfo(4, inputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;        inputLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">SetTensorInfo</a>(inputInfo);</div><div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;</div><div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;        <a class="code" href="structarmnn_1_1_pad_descriptor.xhtml">PadDescriptor</a> padDescriptor({{0, 0},</div><div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;                                     {1, 1},</div><div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;                                     {1, 1},</div><div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;                                     {0, 0}});</div><div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;        <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* padLayer = network-&gt;AddPadLayer(padDescriptor, <span class="stringliteral">&quot;Pad&quot;</span>);</div><div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> paddedInfo(4, paddedShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;        padLayer-&gt;GetOutputSlot(0).SetTensorInfo(paddedInfo);</div><div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;</div><div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;        <a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml">DepthwiseConvolution2dDescriptor</a> convDescriptor;</div><div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;        convDescriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">m_DataLayout</a>  = <a class="code" href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">DataLayout::NHWC</a>;</div><div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;        convDescriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">m_StrideX</a>     = 1;</div><div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;        convDescriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">m_StrideY</a>     = 1;</div><div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;        convDescriptor.<a class="code" href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">m_BiasEnabled</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;</div><div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;        std::vector&lt;float&gt;    weightsData  = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,</div><div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;                                              11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,</div><div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;                                              21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,</div><div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;                                              31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42};</div><div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>            weightsInfo(4, weightsShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;        <a class="code" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a>           weights(weightsInfo, weightsData);</div><div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;        std::vector&lt;float&gt;    biasVector   = {5, 6, 7, 8, 9, 10, 11, 12, 5, 6, 7, 8};</div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a>            biasInfo({12}, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;        <a class="code" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a>           bias(biasInfo, biasVector);</div><div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;        <a class="code" href="classarmnn_1_1_optional.xhtml">Optional&lt;ConstTensor&gt;</a> optionalBias = <a class="code" href="classarmnn_1_1_optional.xhtml">Optional&lt;ConstTensor&gt;</a>(bias);</div><div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;</div><div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;        <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* conv2dLayer = network-&gt;AddDepthwiseConvolution2dLayer(convDescriptor,</div><div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;                                                                                 weights,</div><div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;                                                                                 optionalBias,</div><div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;                                                                                 <span class="stringliteral">&quot;DepthwiseConv2D&quot;</span>);</div><div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;</div><div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;        <a class="code" href="classarmnn_1_1_tensor_info.xhtml">TensorInfo</a> outputInfo(4, outputShape, <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">DataType::Float32</a>);</div><div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;        conv2dLayer-&gt;GetOutputSlot(0).SetTensorInfo(outputInfo);</div><div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;</div><div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;        <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* outputLayer = network-&gt;AddOutputLayer(0);</div><div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;</div><div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;        <span class="comment">// Connect layers</span></div><div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;        inputLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(padLayer-&gt;GetInputSlot(0));</div><div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;        padLayer-&gt;GetOutputSlot(0).Connect(conv2dLayer-&gt;GetInputSlot(0));</div><div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;        conv2dLayer-&gt;GetOutputSlot(0).Connect(outputLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;</div><div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;        <span class="comment">// Create ArmNN runtime</span></div><div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;        <a class="code" href="namespacearmnn.xhtml#a150468a02bd7b2d2d061c4aaaee939f0">IRuntimePtr</a>          run              = <a class="code" href="classarmnn_1_1_i_runtime.xhtml#ad44ecd3700748dc30dc4bbe34ba5bde7">IRuntime::Create</a>(<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml">IRuntime::CreationOptions</a>());    <span class="comment">// default options</span></div><div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;        <span class="comment">// Optimise the network</span></div><div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;        <a class="code" href="namespacearmnn.xhtml#a674efcf6cbdb9e831d653ff0e821fb38">IOptimizedNetworkPtr</a> optimizedNetwork = <a class="code" href="namespacearmnn.xhtml#a82e98ef05fd67036d1195ba17174d685">Optimize</a>(*network, {<a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">Compute::CpuRef</a>}, run-&gt;GetDeviceSpec());</div><div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;        <span class="comment">// Load network into runtime</span></div><div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;        <a class="code" href="namespacearmnn.xhtml#a0d8160388a127c1a23b37bc88dc6e2ec">NetworkId</a>            networkIdentifier;</div><div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;        CHECK(run-&gt;LoadNetwork(networkIdentifier, std::move(optimizedNetwork)) == <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">Status::Success</a>);</div><div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;</div><div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;        <a class="code" href="namespacearmnn.xhtml#aa01bce88f89975a5a031db4cc8861527">InputTensors</a> inputTensors{{0, <a class="code" href="classarmnn_1_1_const_tensor.xhtml">ConstTensor</a>(run-&gt;GetInputTensorInfo(networkIdentifier, 0), inputData.data())}};</div><div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;</div><div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;        <span class="comment">// Set the initial values of the data to different values to the golden data just in case the inference fails.</span></div><div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;        std::vector&lt;float&gt; optimizedData(300, -std::numeric_limits&lt;float&gt;::infinity());</div><div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;        <a class="code" href="namespacearmnn.xhtml#a8f091a512915d1cb29a4ebf13dfc53ea">OutputTensors</a>      outputTensors{{0, <a class="code" href="classarmnn_1_1_tensor.xhtml">Tensor</a>(outputInfo, optimizedData.data())}};</div><div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;        <span class="comment">// Execute network</span></div><div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;        run-&gt;EnqueueWorkload(networkIdentifier, inputTensors, outputTensors);</div><div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;        <span class="comment">// Unload it.</span></div><div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;        run-&gt;UnloadNetwork(networkIdentifier);</div><div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;</div><div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;        <span class="comment">// In this second case the pad will have two outputs, one connected to the conv layer the second connected to</span></div><div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;        <span class="comment">// a second output layer. This will prevent the FoldPadLayerIntoDepthwiseConv2dLayer optimization from working.</span></div><div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;        <span class="comment">// A previous test, FoldPadLayerIntoDepthwiseConv2d_PadWithMultipleOutputsShouldNotBeOptimized, has proved that</span></div><div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;        <span class="comment">// doing this will avoid the optimization.</span></div><div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;        <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">IConnectableLayer</a>* dummyOutputLayer = network-&gt;AddOutputLayer(1);</div><div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;        padLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">GetOutputSlot</a>(0).<a class="code" href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">Connect</a>(dummyOutputLayer-&gt;<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">GetInputSlot</a>(0));</div><div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;</div><div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;        <span class="comment">// Optimize and load and execute it a second time.</span></div><div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;        optimizedNetwork = <a class="code" href="namespacearmnn.xhtml#a82e98ef05fd67036d1195ba17174d685">Optimize</a>(*network, {<a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">Compute::CpuRef</a>}, run-&gt;GetDeviceSpec());</div><div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;        CHECK(run-&gt;LoadNetwork(networkIdentifier, std::move(optimizedNetwork)) == <a class="code" href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">Status::Success</a>);</div><div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;        std::vector&lt;float&gt; goldenData(300, 0.0f);</div><div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;        std::vector&lt;float&gt; padOutputData(108, 0.0f);</div><div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;        <a class="code" href="namespacearmnn.xhtml#a8f091a512915d1cb29a4ebf13dfc53ea">OutputTensors</a>      goldenTensors{{0, <a class="code" href="classarmnn_1_1_tensor.xhtml">Tensor</a>(outputInfo, goldenData.data())},</div><div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;                                         {1, <a class="code" href="classarmnn_1_1_tensor.xhtml">Tensor</a>(paddedInfo, padOutputData.data())}};</div><div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;        run-&gt;EnqueueWorkload(networkIdentifier, inputTensors, goldenTensors);</div><div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;</div><div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;        <span class="comment">// Now we can compare goldenData against optimizedData. They should be the same.</span></div><div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;        CHECK(std::equal(goldenData.begin(), goldenData.end(), optimizedData.begin()));</div><div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;    }</div><div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;    <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception&amp; e)</div><div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;    {</div><div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;        std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;</div><div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;        <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, e.what());</div><div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;    }</div><div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;}</div><div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;</div><div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;}</div><div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_aea202e14d8874cefd9a0f778022b7e25"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">armnn::Convolution2dDescriptor::m_BiasEnabled</a></div><div class="ttdeci">bool m_BiasEnabled</div><div class="ttdoc">Enable/disable bias. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00466">Descriptors.hpp:466</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::Convolution2dDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00468">Descriptors.hpp:468</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_runtime_xhtml_ad44ecd3700748dc30dc4bbe34ba5bde7"><div class="ttname"><a href="classarmnn_1_1_i_runtime.xhtml#ad44ecd3700748dc30dc4bbe34ba5bde7">armnn::IRuntime::Create</a></div><div class="ttdeci">static IRuntimePtr Create(const CreationOptions &amp;options)</div><div class="ttdef"><b>Definition:</b> <a href="_runtime_8cpp_source.xhtml#l00039">Runtime.cpp:39</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00061">INetwork.hpp:61</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_aa9e49717ebdb741e8c767741647fc618"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#aa9e49717ebdb741e8c767741647fc618">armnn::Pooling2dDescriptor::m_PadBottom</a></div><div class="ttdeci">uint32_t m_PadBottom</div><div class="ttdoc">Padding bottom value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00371">Descriptors.hpp:371</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_aea202e14d8874cefd9a0f778022b7e25"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#aea202e14d8874cefd9a0f778022b7e25">armnn::DepthwiseConvolution2dDescriptor::m_BiasEnabled</a></div><div class="ttdeci">bool m_BiasEnabled</div><div class="ttdoc">Enable/disable bias. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00518">Descriptors.hpp:518</a></div></div>
<div class="ttc" id="classarmnn_1_1_layer_with_parameters_xhtml_a502c06a1b13e6d90a6cbf47c081f1444"><div class="ttname"><a href="classarmnn_1_1_layer_with_parameters.xhtml#a502c06a1b13e6d90a6cbf47c081f1444">armnn::LayerWithParameters::GetParameters</a></div><div class="ttdeci">const Parameters &amp; GetParameters() const</div><div class="ttdef"><b>Definition:</b> <a href="_layer_with_parameters_8hpp_source.xhtml#l00018">LayerWithParameters.hpp:18</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">armnn::Compute::CpuRef</a></div><div class="ttdoc">CPU Execution: Reference C++ kernels. </div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_ac18546ebbebbb32fe0a03baa9bf2c600"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac18546ebbebbb32fe0a03baa9bf2c600">armnn::Pooling2dDescriptor::m_PadLeft</a></div><div class="ttdeci">uint32_t m_PadLeft</div><div class="ttdoc">Padding left value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00365">Descriptors.hpp:365</a></div></div>
<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a8b394ff60ed829a91f07deac476f3db2"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a8b394ff60ed829a91f07deac476f3db2">armnn::optimizations::FoldPadIntoConvolution2d</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; PadLayer, Convolution2dLayer, pad_fold::FoldPadIntoConvolution2dImpl &gt; FoldPadIntoConvolution2d</div><div class="ttdef"><b>Definition:</b> <a href="_fold_pad_into_layer2d_8hpp_source.xhtml#l00233">FoldPadIntoLayer2d.hpp:233</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_aa7427025a851113a492de0b68b23d22a"><div class="ttname"><a href="namespacearmnn.xhtml#aa7427025a851113a492de0b68b23d22a">armnn::MakeOptimizations</a></div><div class="ttdeci">Optimizer::Optimizations MakeOptimizations(Args &amp;&amp;... args)</div><div class="ttdef"><b>Definition:</b> <a href="_optimizer_8hpp_source.xhtml#l00043">Optimizer.hpp:43</a></div></div>
<div class="ttc" id="classarmnn_1_1_optional_xhtml"><div class="ttname"><a href="classarmnn_1_1_optional.xhtml">armnn::Optional</a></div><div class="ttdef"><b>Definition:</b> <a href="_optional_8hpp_source.xhtml#l00270">Optional.hpp:270</a></div></div>
<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a227e9ab5e488aa90ba462790ba0e5aec"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a227e9ab5e488aa90ba462790ba0e5aec">armnn::optimizations::FoldPadIntoDepthwiseConvolution2d</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; PadLayer, DepthwiseConvolution2dLayer, pad_fold::FoldPadIntoDepthwiseConvolution2dImpl &gt; FoldPadIntoDepthwiseConvolution2d</div><div class="ttdef"><b>Definition:</b> <a href="_fold_pad_into_layer2d_8hpp_source.xhtml#l00237">FoldPadIntoLayer2d.hpp:237</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::DepthwiseConvolution2dDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00520">Descriptors.hpp:520</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_info_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_info.xhtml">armnn::TensorInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00152">Tensor.hpp:152</a></div></div>
<div class="ttc" id="classarmnn_1_1_depthwise_convolution2d_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_depthwise_convolution2d_layer.xhtml">armnn::DepthwiseConvolution2dLayer</a></div><div class="ttdoc">This layer represents a depthwise convolution 2d operation. </div><div class="ttdef"><b>Definition:</b> <a href="_depthwise_convolution2d_layer_8hpp_source.xhtml#l00015">DepthwiseConvolution2dLayer.hpp:15</a></div></div>
<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml">armnn::optimizations</a></div><div class="ttdef"><b>Definition:</b> <a href="_add_broadcast_reshape_layer_8hpp_source.xhtml#l00015">AddBroadcastReshapeLayer.hpp:15</a></div></div>
<div class="ttc" id="classarmnn_1_1_graph_xhtml_a7563c5b899e7d0ada08fd0fdb202f205"><div class="ttname"><a href="classarmnn_1_1_graph.xhtml#a7563c5b899e7d0ada08fd0fdb202f205">armnn::Graph::AddLayer</a></div><div class="ttdeci">LayerT * AddLayer(Args &amp;&amp;... args)</div><div class="ttdoc">Adds a new layer, of type LayerType, to the graph constructed with the arguments passed. </div><div class="ttdef"><b>Definition:</b> <a href="_graph_8hpp_source.xhtml#l00402">Graph.hpp:402</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a6d8fb685cc1ff224f25aa127fcf62c86"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6d8fb685cc1ff224f25aa127fcf62c86">armnn::Pooling2dDescriptor::m_PoolWidth</a></div><div class="ttdeci">uint32_t m_PoolWidth</div><div class="ttdoc">Pooling width value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00373">Descriptors.hpp:373</a></div></div>
<div class="ttc" id="classarmnn_1_1_graph_xhtml_a98b1109a9006f8cc7d4566146a3bd737"><div class="ttname"><a href="classarmnn_1_1_graph.xhtml#a98b1109a9006f8cc7d4566146a3bd737">armnn::Graph::cbegin</a></div><div class="ttdeci">ConstIterator cbegin() const</div><div class="ttdoc">Returns const iterator pointing to the beginning of the list. Lowercase for range-based for loops...</div><div class="ttdef"><b>Definition:</b> <a href="_graph_8hpp_source.xhtml#l00172">Graph.hpp:172</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml">armnn::Convolution2dDescriptor</a></div><div class="ttdoc">A Convolution2dDescriptor for the Convolution2dLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00420">Descriptors.hpp:420</a></div></div>
<div class="ttc" id="classarmnn_1_1_output_slot_xhtml_adcfb97035799ea4c043f9ef370714815"><div class="ttname"><a href="classarmnn_1_1_output_slot.xhtml#adcfb97035799ea4c043f9ef370714815">armnn::OutputSlot::Connect</a></div><div class="ttdeci">int Connect(InputSlot &amp;destination)</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8cpp_source.xhtml#l00083">Layer.cpp:83</a></div></div>
<div class="ttc" id="classarmnn_1_1_optimizer_xhtml_a1f48ba622b76ea04d15c9b62f642bf08"><div class="ttname"><a href="classarmnn_1_1_optimizer.xhtml#a1f48ba622b76ea04d15c9b62f642bf08">armnn::Optimizer::Pass</a></div><div class="ttdeci">static void Pass(Graph &amp;graph, const Optimizations &amp;optimizations)</div><div class="ttdef"><b>Definition:</b> <a href="_optimizer_8cpp_source.xhtml#l00016">Optimizer.cpp:16</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a150468a02bd7b2d2d061c4aaaee939f0"><div class="ttname"><a href="namespacearmnn.xhtml#a150468a02bd7b2d2d061c4aaaee939f0">armnn::IRuntimePtr</a></div><div class="ttdeci">std::unique_ptr&lt; IRuntime, void(*)(IRuntime *runtime)&gt; IRuntimePtr</div><div class="ttdef"><b>Definition:</b> <a href="_i_runtime_8hpp_source.xhtml#l00030">IRuntime.hpp:30</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a3888429b6ebc79f9a7df549e5e4d9a2fa843f2812f595e7ec7c5036e89fde02d6"><div class="ttname"><a href="namespacearmnn.xhtml#a3888429b6ebc79f9a7df549e5e4d9a2fa843f2812f595e7ec7c5036e89fde02d6">armnn::PaddingMethod::Exclude</a></div><div class="ttdoc">The padding fields don&amp;#39;t count and are ignored. </div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a8c29d6ea9b4186d69aad5961c910939c"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a8c29d6ea9b4186d69aad5961c910939c">armnn::Pooling2dDescriptor::m_PaddingMethod</a></div><div class="ttdeci">PaddingMethod m_PaddingMethod</div><div class="ttdoc">The padding method to be used. (Exclude, IgnoreValue). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00383">Descriptors.hpp:383</a></div></div>
<div class="ttc" id="classarmnn_1_1_convolution2d_layer_xhtml_a6266a703017d7296f87cc4923df2d725"><div class="ttname"><a href="classarmnn_1_1_convolution2d_layer.xhtml#a6266a703017d7296f87cc4923df2d725">armnn::Convolution2dLayer::m_Weight</a></div><div class="ttdeci">std::shared_ptr&lt; ConstTensorHandle &gt; m_Weight</div><div class="ttdoc">A unique pointer to store Weight values. </div><div class="ttdef"><b>Definition:</b> <a href="_convolution2d_layer_8hpp_source.xhtml#l00020">Convolution2dLayer.hpp:20</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a56b51f56cef50cdfa554258eecdab046"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a56b51f56cef50cdfa554258eecdab046">armnn::Pooling2dDescriptor::m_PadTop</a></div><div class="ttdeci">uint32_t m_PadTop</div><div class="ttdoc">Padding top value in the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00369">Descriptors.hpp:369</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_aa01bce88f89975a5a031db4cc8861527"><div class="ttname"><a href="namespacearmnn.xhtml#aa01bce88f89975a5a031db4cc8861527">armnn::InputTensors</a></div><div class="ttdeci">std::vector&lt; std::pair&lt; LayerBindingId, class ConstTensor &gt; &gt; InputTensors</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00360">Tensor.hpp:360</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml"><div class="ttname"><a href="namespacearmnn.xhtml">armnn</a></div><div class="ttdoc">Copyright (c) 2021 ARM Limited and Contributors. </div><div class="ttdef"><b>Definition:</b> <a href="01__00__software__tools_8dox_source.xhtml#l00006">01_00_software_tools.dox:6</a></div></div>
<div class="ttc" id="classarmnn_1_1_pad_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_pad_layer.xhtml">armnn::PadLayer</a></div><div class="ttdoc">This layer represents a pad operation. </div><div class="ttdef"><b>Definition:</b> <a href="_pad_layer_8hpp_source.xhtml#l00014">PadLayer.hpp:14</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_afe6a3377c4531315354def9023c8fdda"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">armnn::Pooling2dDescriptor::m_StrideX</a></div><div class="ttdeci">uint32_t m_StrideX</div><div class="ttdoc">Stride value when proceeding through input for the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00377">Descriptors.hpp:377</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_a5ee4a6c9a2481245487b1b1a70d20fd0"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#a5ee4a6c9a2481245487b1b1a70d20fd0">armnn::IOutputSlot::SetTensorInfo</a></div><div class="ttdeci">virtual void SetTensorInfo(const TensorInfo &amp;tensorInfo)=0</div></div>
<div class="ttc" id="classarmnn_1_1_tensor_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor.xhtml">armnn::Tensor</a></div><div class="ttdoc">A tensor defined by a TensorInfo (shape and data type) and a mutable backing store. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00319">Tensor.hpp:319</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a5699e8606c37d18c03910b242cd1b010"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a5699e8606c37d18c03910b242cd1b010">armnn::Pooling2dDescriptor::m_PoolHeight</a></div><div class="ttdeci">uint32_t m_PoolHeight</div><div class="ttdoc">Pooling height value. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00375">Descriptors.hpp:375</a></div></div>
<div class="ttc" id="structarmnn_1_1_pad_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_pad_descriptor.xhtml">armnn::PadDescriptor</a></div><div class="ttdoc">A PadDescriptor for the PadLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00993">Descriptors.hpp:993</a></div></div>
<div class="ttc" id="classarmnn_1_1_layer_xhtml_acf8b8e23bf647836592982f97088d375"><div class="ttname"><a href="classarmnn_1_1_layer.xhtml#acf8b8e23bf647836592982f97088d375">armnn::Layer::GetInputSlot</a></div><div class="ttdeci">const InputSlot &amp; GetInputSlot(unsigned int index) const override</div><div class="ttdoc">Get a const input slot handle by slot index. </div><div class="ttdef"><b>Definition:</b> <a href="_layer_8hpp_source.xhtml#l00316">Layer.hpp:316</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_afe6a3377c4531315354def9023c8fdda"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">armnn::Convolution2dDescriptor::m_StrideX</a></div><div class="ttdeci">uint32_t m_StrideX</div><div class="ttdoc">Stride value when proceeding through input for the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00458">Descriptors.hpp:458</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_afe6a3377c4531315354def9023c8fdda"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#afe6a3377c4531315354def9023c8fdda">armnn::DepthwiseConvolution2dDescriptor::m_StrideX</a></div><div class="ttdeci">uint32_t m_StrideX</div><div class="ttdoc">Stride value when proceeding through input for the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00510">Descriptors.hpp:510</a></div></div>
<div class="ttc" id="classarmnn_1_1_output_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_output_layer.xhtml">armnn::OutputLayer</a></div><div class="ttdoc">A layer user-provided data can be bound to (e.g. inputs, outputs). </div><div class="ttdef"><b>Definition:</b> <a href="_output_layer_8hpp_source.xhtml#l00013">OutputLayer.hpp:13</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38"><div class="ttname"><a href="namespacearmnn.xhtml#a67a0db04d321a74b7e7fcfd3f1a3f70ba505a83f220c02df2f85c3810cd9ceb38">armnn::Status::Success</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a002bc30e590d78cbb4f4d12171055ca7"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a002bc30e590d78cbb4f4d12171055ca7">armnn::Pooling2dDescriptor::m_PadRight</a></div><div class="ttdeci">uint32_t m_PadRight</div><div class="ttdoc">Padding right value in the width dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00367">Descriptors.hpp:367</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a82e98ef05fd67036d1195ba17174d685"><div class="ttname"><a href="namespacearmnn.xhtml#a82e98ef05fd67036d1195ba17174d685">armnn::Optimize</a></div><div class="ttdeci">IOptimizedNetworkPtr Optimize(const INetwork &amp;network, const std::vector&lt; BackendId &gt; &amp;backendPreferences, const IDeviceSpec &amp;deviceSpec, const OptimizerOptions &amp;options=OptimizerOptions(), Optional&lt; std::vector&lt; std::string &gt; &amp;&gt; messages=EmptyOptional())</div><div class="ttdoc">Create an optimized version of the network. </div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l01613">Network.cpp:1613</a></div></div>
<div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a0d8160388a127c1a23b37bc88dc6e2ec"><div class="ttname"><a href="namespacearmnn.xhtml#a0d8160388a127c1a23b37bc88dc6e2ec">armnn::NetworkId</a></div><div class="ttdeci">int NetworkId</div><div class="ttdef"><b>Definition:</b> <a href="_i_runtime_8hpp_source.xhtml#l00024">IRuntime.hpp:24</a></div></div>
<div class="ttc" id="classarmnn_1_1_const_tensor_xhtml"><div class="ttname"><a href="classarmnn_1_1_const_tensor.xhtml">armnn::ConstTensor</a></div><div class="ttdoc">A tensor defined by a TensorInfo (shape and data type) and an immutable backing store. </div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00327">Tensor.hpp:327</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a8f091a512915d1cb29a4ebf13dfc53ea"><div class="ttname"><a href="namespacearmnn.xhtml#a8f091a512915d1cb29a4ebf13dfc53ea">armnn::OutputTensors</a></div><div class="ttdeci">std::vector&lt; std::pair&lt; LayerBindingId, class Tensor &gt; &gt; OutputTensors</div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00361">Tensor.hpp:361</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a674efcf6cbdb9e831d653ff0e821fb38"><div class="ttname"><a href="namespacearmnn.xhtml#a674efcf6cbdb9e831d653ff0e821fb38">armnn::IOptimizedNetworkPtr</a></div><div class="ttdeci">std::unique_ptr&lt; IOptimizedNetwork, void(*)(IOptimizedNetwork *network)&gt; IOptimizedNetworkPtr</div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00173">INetwork.hpp:173</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021"><div class="ttname"><a href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718ab1897515d548a960afe49ecf66a29021">armnn::PoolingAlgorithm::Average</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml_ac1fe174bbadfb39a2b636940c2e647c8"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">armnn::Convolution2dDescriptor::m_StrideY</a></div><div class="ttdeci">uint32_t m_StrideY</div><div class="ttdoc">Stride value when proceeding through input for the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00460">Descriptors.hpp:460</a></div></div>
<div class="ttc" id="classarmnn_1_1_graph_xhtml"><div class="ttname"><a href="classarmnn_1_1_graph.xhtml">armnn::Graph</a></div><div class="ttdef"><b>Definition:</b> <a href="_graph_8hpp_source.xhtml#l00029">Graph.hpp:29</a></div></div>
<div class="ttc" id="classarmnn_1_1_pooling2d_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_pooling2d_layer.xhtml">armnn::Pooling2dLayer</a></div><div class="ttdoc">This layer represents a pooling 2d operation. </div><div class="ttdef"><b>Definition:</b> <a href="_pooling2d_layer_8hpp_source.xhtml#l00013">Pooling2dLayer.hpp:13</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a6089e1ca91914015777ea780a513131a"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a6089e1ca91914015777ea780a513131a">armnn::Pooling2dDescriptor::m_DataLayout</a></div><div class="ttdeci">DataLayout m_DataLayout</div><div class="ttdoc">The data layout to be used (NCHW, NHWC). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00385">Descriptors.hpp:385</a></div></div>
<div class="ttc" id="structarmnn_1_1_i_runtime_1_1_creation_options_xhtml"><div class="ttname"><a href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml">armnn::IRuntime::CreationOptions</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_runtime_8hpp_source.xhtml#l00101">IRuntime.hpp:101</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_a0031997bf43bd2747656c31e4977793a"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#a0031997bf43bd2747656c31e4977793a">armnn::Pooling2dDescriptor::m_PoolType</a></div><div class="ttdeci">PoolingAlgorithm m_PoolType</div><div class="ttdoc">The pooling algorithm to use (Max. Average, L2). </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00363">Descriptors.hpp:363</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml_ac1fe174bbadfb39a2b636940c2e647c8"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">armnn::DepthwiseConvolution2dDescriptor::m_StrideY</a></div><div class="ttdeci">uint32_t m_StrideY</div><div class="ttdoc">Stride value when proceeding through input for the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00512">Descriptors.hpp:512</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a3888429b6ebc79f9a7df549e5e4d9a2faad301514192636ad34210adce598a45a"><div class="ttname"><a href="namespacearmnn.xhtml#a3888429b6ebc79f9a7df549e5e4d9a2faad301514192636ad34210adce598a45a">armnn::PaddingMethod::IgnoreValue</a></div><div class="ttdoc">The padding fields count, but are ignored. </div></div>
<div class="ttc" id="classarmnn_1_1_depthwise_convolution2d_layer_xhtml_a6266a703017d7296f87cc4923df2d725"><div class="ttname"><a href="classarmnn_1_1_depthwise_convolution2d_layer.xhtml#a6266a703017d7296f87cc4923df2d725">armnn::DepthwiseConvolution2dLayer::m_Weight</a></div><div class="ttdeci">std::shared_ptr&lt; ConstTensorHandle &gt; m_Weight</div><div class="ttdoc">A unique pointer to store Weight values. </div><div class="ttdef"><b>Definition:</b> <a href="_depthwise_convolution2d_layer_8hpp_source.xhtml#l00019">DepthwiseConvolution2dLayer.hpp:19</a></div></div>
<div class="ttc" id="namespacearmnn_1_1optimizations_xhtml_a279d0a7c56966cea334303d48a874964"><div class="ttname"><a href="namespacearmnn_1_1optimizations.xhtml#a279d0a7c56966cea334303d48a874964">armnn::optimizations::FoldPadIntoPooling2d</a></div><div class="ttdeci">OptimizeForExclusiveConnection&lt; PadLayer, Pooling2dLayer, pad_fold::FoldPadIntoPooling2dImpl &gt; FoldPadIntoPooling2d</div><div class="ttdef"><b>Definition:</b> <a href="_fold_pad_into_layer2d_8hpp_source.xhtml#l00239">FoldPadIntoLayer2d.hpp:239</a></div></div>
<div class="ttc" id="classarmnn_1_1_input_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_input_layer.xhtml">armnn::InputLayer</a></div><div class="ttdoc">A layer user-provided data can be bound to (e.g. inputs, outputs). </div><div class="ttdef"><b>Definition:</b> <a href="_input_layer_8hpp_source.xhtml#l00013">InputLayer.hpp:13</a></div></div>
<div class="ttc" id="_test_utils_8hpp_xhtml_a0eedb278f57355b47fa983450d4e378c"><div class="ttname"><a href="_test_utils_8hpp.xhtml#a0eedb278f57355b47fa983450d4e378c">CheckSequence</a></div><div class="ttdeci">bool CheckSequence(const armnn::Graph::ConstIterator first, const armnn::Graph::ConstIterator last)</div><div class="ttdef"><b>Definition:</b> <a href="_test_utils_8hpp_source.xhtml#l00021">TestUtils.hpp:21</a></div></div>
<div class="ttc" id="classarmnn_1_1_output_slot_xhtml_a7e5c5771d741dd5473989047a9314728"><div class="ttname"><a href="classarmnn_1_1_output_slot.xhtml#a7e5c5771d741dd5473989047a9314728">armnn::OutputSlot::SetTensorInfo</a></div><div class="ttdeci">void SetTensorInfo(const TensorInfo &amp;tensorInfo) override</div><div class="ttdef"><b>Definition:</b> <a href="_layer_8cpp_source.xhtml#l00058">Layer.cpp:58</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a6ec9e0eb66d7d6a01240492a0b18104c"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a6ec9e0eb66d7d6a01240492a0b18104c">armnn::IConnectableLayer::GetInputSlot</a></div><div class="ttdeci">virtual const IInputSlot &amp; GetInputSlot(unsigned int index) const =0</div><div class="ttdoc">Get a const input slot handle by slot index. </div></div>
<div class="ttc" id="classarmnn_1_1_layer_xhtml_a0e36688a43c35668d8db5257274c68fe"><div class="ttname"><a href="classarmnn_1_1_layer.xhtml#a0e36688a43c35668d8db5257274c68fe">armnn::Layer::GetOutputSlot</a></div><div class="ttdeci">const OutputSlot &amp; GetOutputSlot(unsigned int index=0) const override</div><div class="ttdoc">Get the const output slot handle by slot index. </div><div class="ttdef"><b>Definition:</b> <a href="_layer_8hpp_source.xhtml#l00318">Layer.hpp:318</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a961bbfe1db71a848eff5a1f0ab775718a6a061313d22e51e0f25b7cd4dc065233"><div class="ttname"><a href="namespacearmnn.xhtml#a961bbfe1db71a848eff5a1f0ab775718a6a061313d22e51e0f25b7cd4dc065233">armnn::PoolingAlgorithm::Max</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6a166495adc0d0f53bee6baecc577f5204">armnn::DataType::Float32</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml_a80ac4eda2e7f2757ec9dd96fc96dbd16"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml#a80ac4eda2e7f2757ec9dd96fc96dbd16">armnn::IConnectableLayer::GetOutputSlot</a></div><div class="ttdeci">virtual const IOutputSlot &amp; GetOutputSlot(unsigned int index) const =0</div><div class="ttdoc">Get the const output slot handle by slot index. </div></div>
<div class="ttc" id="classarmnn_1_1_graph_xhtml_a02fd29b6dc3e21fbe4484362d85893bc"><div class="ttname"><a href="classarmnn_1_1_graph.xhtml#a02fd29b6dc3e21fbe4484362d85893bc">armnn::Graph::cend</a></div><div class="ttdeci">ConstIterator cend() const</div><div class="ttdoc">Returns const iterator pointing to the end of the list. Lowercase for range-based for loops...</div><div class="ttdef"><b>Definition:</b> <a href="_graph_8hpp_source.xhtml#l00174">Graph.hpp:174</a></div></div>
<div class="ttc" id="classarmnn_1_1_convolution2d_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_convolution2d_layer.xhtml">armnn::Convolution2dLayer</a></div><div class="ttdoc">This layer represents a convolution 2d operation. </div><div class="ttdef"><b>Definition:</b> <a href="_convolution2d_layer_8hpp_source.xhtml#l00015">Convolution2dLayer.hpp:15</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ace74f6f9feb95a964a49d79458232703"><div class="ttname"><a href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">armnn::INetworkPtr</a></div><div class="ttdeci">std::unique_ptr&lt; INetwork, void(*)(INetwork *network)&gt; INetworkPtr</div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00172">INetwork.hpp:172</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml_ac1835f8756a9f03c02fcf9664e3a0fce"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml#ac1835f8756a9f03c02fcf9664e3a0fce">armnn::IOutputSlot::Connect</a></div><div class="ttdeci">virtual int Connect(IInputSlot &amp;destination)=0</div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml">armnn::Pooling2dDescriptor</a></div><div class="ttdoc">A Pooling2dDescriptor for the Pooling2dLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00329">Descriptors.hpp:329</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_network_xhtml_a464f0ff87b1aabf71febaa71321dd40b"><div class="ttname"><a href="classarmnn_1_1_i_network.xhtml#a464f0ff87b1aabf71febaa71321dd40b">armnn::INetwork::Create</a></div><div class="ttdeci">static INetworkPtr Create(NetworkOptions networkOptions={})</div><div class="ttdef"><b>Definition:</b> <a href="_network_8cpp_source.xhtml#l00530">Network.cpp:530</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml_ac1fe174bbadfb39a2b636940c2e647c8"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml#ac1fe174bbadfb39a2b636940c2e647c8">armnn::Pooling2dDescriptor::m_StrideY</a></div><div class="ttdeci">uint32_t m_StrideY</div><div class="ttdoc">Stride value when proceeding through input for the height dimension. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00379">Descriptors.hpp:379</a></div></div>
<div class="ttc" id="structarmnn_1_1_depthwise_convolution2d_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_depthwise_convolution2d_descriptor.xhtml">armnn::DepthwiseConvolution2dDescriptor</a></div><div class="ttdoc">A DepthwiseConvolution2dDescriptor for the DepthwiseConvolution2dLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00472">Descriptors.hpp:472</a></div></div>
<div class="ttc" id="classarmnn_1_1_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_layer.xhtml">armnn::Layer</a></div><div class="ttdef"><b>Definition:</b> <a href="_layer_8hpp_source.xhtml#l00210">Layer.hpp:210</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51"><div class="ttname"><a href="namespacearmnn.xhtml#ad1d5cce2d9e9a5d61c243e5c989112e0ad066db54b89b0912e7e7c6da51e2da51">armnn::DataLayout::NHWC</a></div></div>
</div><!-- fragment -->
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.xhtml">src</a></li><li class="navelem"><a class="el" href="dir_e0a84d05c80a2ef4231141dcbbeac5c8.xhtml">armnn</a></li><li class="navelem"><a class="el" href="dir_9d86fd1fbecbedf5bdb69c7e7235fe5f.xhtml">test</a></li><li class="navelem"><a class="el" href="dir_f1cd0e6da811a659c139424442adfb5f.xhtml">optimizations</a></li><li class="navelem"><a class="el" href="_fold_pad_tests_8cpp.xhtml">FoldPadTests.cpp</a></li>
    <li class="footer">Generated on Tue Aug 24 2021 16:18:45 for ArmNN by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
  </ul>
</div>
</body>
</html>