[Mesa-dev] [PATCH 4/6] nir: Add a local variable-based copy propagation pass
Eric Anholt
eric at anholt.net
Tue Dec 13 17:43:11 UTC 2016
Jason Ekstrand <jason at jlekstrand.net> writes:
> diff --git a/src/compiler/nir/nir_opt_copy_prop_vars.c b/src/compiler/nir/nir_opt_copy_prop_vars.c
> new file mode 100644
> index 0000000..728e476
> --- /dev/null
> +++ b/src/compiler/nir/nir_opt_copy_prop_vars.c
> @@ -0,0 +1,799 @@
> +/*
> + * Copyright © 2016 Intel Corporation
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the "Software"),
> + * to deal in the Software without restriction, including without limitation
> + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom the
> + * Software is furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice (including the next
> + * paragraph) shall be included in all copies or substantial portions of the
> + * Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> + * IN THE SOFTWARE.
> + */
> +
> +#include "nir.h"
> +#include "nir_builder.h"
> +
> +/**
> + * Variable-based copy propagation
> + *
> + * Normally, NIR trusts in SSA form for most of its copy-propagation needs.
> + * However, there are cases, especially when dealing with indirects, where SSA
> + * won't help you. This pass is for those times. Specifically, it handles
> + * the following things that the rest of NIR can't:
> + *
> + * 1) Copy-propagation on variables that have indirect access. This includes
> + * propagating from indirect stores into indirect loads.
> + *
> + * 2) Dead code elimination of store_var and copy_var intrinsics based on
> + * killed destination values.
> + *
> + * 3) Removal of redundant load_var intrinsics. We can't trust regular CSE
> + * to do this because it isn't aware of variable writes that may alias the
> + * value and make the former load invalid.
> + *
> + * Unfortunately, properly handling all of those cases makes this path rather
> + * complex. In order to avoid additional complexity, this pass is entirely
> + * block-local. If we tried to make it local the data-flow analysis would
I think here you wanted to say "make it global."
I haven't reviewed the rest, I was just skimming to see what you were up
to.
> + * rapidly get out of hand. Fortunately, for anything that is only ever
> + * accessed directly, we get SSA based copy-propagation which is extremely
> + * powerful so this isn't that great a loss.
> + */
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 832 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20161213/26b6cd0e/attachment-0001.sig>
More information about the mesa-dev
mailing list