<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">Very cool. Thanks, Arnold.<div><br></div><div>Trivial nitpick:  s/GetExtensionTo64Bits/getExtensionTo64Bits/.</div><div><br></div><div>Assuming Renato’s tests come back OK, this looks good to me.</div><div><br></div><div>-Jim</div><div><br><div><div>On May 14, 2013, at 12:52 PM, Arnold Schwaighofer <<a href="mailto:aschwaighofer@apple.com">aschwaighofer@apple.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">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><a href="radar://13871383">radar://13871383</a><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><span><0001-ARM-ISel-Don-t-create-illegal-types-during-LowerMUL.patch></span></div></blockquote></div><br></div></body></html>