Fix test_slice: avoid unnecessary copying of TensorArray from subblock to parent block(#30168)

In control flow, don't copy TensorArray from subblock to parent block when TensorArray is created in parent block.
revert-31562-mean
liym27 4 years ago committed by GitHub
parent 528e03fc08
commit b2483d78a8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -2278,9 +2278,13 @@ def copy_var_to_parent_block(var, layer_helper):
assert parent_idx >= 0, "Got wrong parent block index when assigning var to parent scope in control_flow"
parent_block = prog.block(parent_idx)
parent_block_var = parent_block.create_var(
dtype=var.dtype, shape=var.shape, type=var.type)
assign(var, parent_block_var)
if var.type == core.VarDesc.VarType.LOD_TENSOR_ARRAY \
and parent_block._find_var_recursive(var.name):
parent_block_var = var
else:
parent_block_var = parent_block.create_var(
dtype=var.dtype, shape=var.shape, type=var.type)
assign(var, parent_block_var)
return parent_block_var

@ -40,9 +40,12 @@ def test_slice_in_if(x):
if x.numpy()[0] > 0:
a.append(x)
else:
a.append(paddle.full(shape=[1, 2], fill_value=9, dtype="int64"))
a.append(paddle.full(shape=[1, 2], fill_value=9, dtype="int32"))
if x.numpy()[0] > 0:
a[0] = x
a[0] = x + 1
out = a[0]
return out

Loading…
Cancel
Save