<div dir="ltr">Hi Arnold,<div><br></div><div style>Looks much simpler, thanks!</div><div style><br></div><div style>It seems that AddRequiredExtensionForVMULL() was reduced to very little and is now only called from one place (SkipExtensionForVMULL) that could even be simplified...</div>
<div style><br></div><div style>I'll test your patch on the test-suite and will let you know.</div><div style><br></div><div style>cheers,</div><div style>--renato</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
On 14 May 2013 20:52, Arnold Schwaighofer <span dir="ltr"><<a href="mailto:aschwaighofer@apple.com" target="_blank">aschwaighofer@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
The transformation happening here is that we want to turn a<br>
"mul(ext(X), ext(X))" into a "vmull(X, X)", stripping off the extension. We have<br>
to make sure that X still has a valid vector type - possibly recreate an<br>
extension to a smaller type. In case of a extload of a memory type smaller than<br>
64 bit we used create a ext(load()). The problem with doing this - instead of<br>
recreating an extload - is that an illegal type is exposed.<br>
<br>
This patch fixes this by creating extloads instead of ext(load()) sequences.<br>
<br>
Fixes PR15970.<br>
<br>
radar://13871383<br>
<br>
>From the bug report:<br>
<br>
Initially we had a<br>
<br>
  mul (v4i32 zextload(from v4i8), v4i32 zextload(from v4i8))<br>
<br>
the transform should create<br>
<br>
  vmull(v4i16 zextload(from v4i8), ...)<br>
<br>
out of this. But instead it creates a<br>
<br>
  vmull(v4i16 zext( v4i8 load()), ...<br>
<br>
where an illegal type is exposed.<br>
<br>
(This would only be exposed if this transform would run during normal legalization because vector legalization is allowed to create illegal types.)<br>
<br>
</blockquote></div><br></div>