[Patch combine] Don't create vector mode ZERO_EXTEND from subregs
authorJames Greenhalgh <james.greenhalgh@arm.com>
Tue, 12 Dec 2017 11:27:54 +0000 (11:27 +0000)
committerJames Greenhalgh <jgreenhalgh@gcc.gnu.org>
Tue, 12 Dec 2017 11:27:54 +0000 (11:27 +0000)
commitc5060cadf030f6517a1552bf0fc263cb03eb96c4
tree1ef03d795f5e00306bb2200aa40cf082fc59bb06
parent49e6a6c023d1b91c90d3fbdf16adf20dff246156
[Patch combine] Don't create vector mode ZERO_EXTEND from subregs

The code in simplify set to handle transforming the paradoxical subreg
expression:

  (set FOO (subreg:M (mem:N BAR) 0))

in to:

  (set FOO (zero_extend:M (mem:N BAR)))

Does not consider the case where M is a vector mode, allowing it to
construct (for example):

  (zero_extend:V4SI (mem:SI))

For one, this has the wrong semantics - but fortunately we fail long
before then in expand_compound_operation.

We need to explicitly reject vector modes from this transformation.

gcc/

* combine.c (simplify_set): Do not transform subregs to zero_extends
if the destination mode is a vector mode.

From-SVN: r255578
gcc/ChangeLog
gcc/combine.c