[Patch combine] Don't create vector mode ZERO_EXTEND from subregs
James Greenhalgh
james.greenhalgh@arm.com
Mon Dec 11 14:19:00 GMT 2017
Hi,
In simplify_set we try transforming the paradoxical subreg expression:
(set FOO (subreg:M (mem:N BAR) 0))
in to:
(set FOO (zero_extend:M (mem:N BAR)))
However, this code does not consider the case where M is a vector
mode, allowing it to construct (for example):
(zero_extend:V4SI (mem:SI))
This would clearly have the wrong semantics, but fortunately we fail long
before then in expand_compound_operation. As we really don't want a vector
zero_extend of a scalar value.
We need to explicitly reject vector modes from this transformation.
This fixes a failure I'm seeing on a branch in which I'm trying to
tackle some performance regressions, so I have no live testcase for
this, but it is wrong by observation.
Tested on aarch64-none-elf and bootstrapped on aarch64-none-linux-gnu with
no issues.
OK?
Thanks,
James
---
2017-12-11 James Greenhalgh <james.greenhalgh@arm.com>
* combine.c (simplify_set): Do not transform subregs to zero_extends
if the destination mode is a vector mode.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Patch-combine-Don-t-create-vector-mode-ZERO_EXTEND-f.patch
Type: text/x-patch
Size: 789 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20171211/4de17c3e/attachment.bin>
More information about the Gcc-patches
mailing list