<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">On 1/12/2017 9:04 AM, Sanjay Patel via
llvm-dev wrote:<br>
</div>
<blockquote
cite="mid:CA+wODiuSUGgjd+pH-YMq-5nCLCcsXudwJQr=zcE7qG13_iAtsw@mail.gmail.com"
type="cite">
<div dir="ltr">
<div>It's time for another round of "What is the canonical IR?"<br>
<br>
Credit for this episode to Zvi and PR31551. :)<br>
<a moz-do-not-send="true"
href="https://llvm.org/bugs/show_bug.cgi?id=31551">https://llvm.org/bugs/show_bug.cgi?id=31551</a>
<pre class="gmail-bz_comment_text" id="gmail-comment_text_2">
define <4 x i16> @shuffle(<16 x i16> %x) {
%shuf = shufflevector <16 x i16> %x, <16 x i16> undef, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
ret <4 x i16> %shuf
}
define <4 x i16> @trunc(<16 x i16> %x) {
%bc = bitcast <16 x i16> %x to <4 x i64>
%tr = trunc <4 x i64> %bc to <4 x i16>
ret <4 x i16> %tr
}
</pre>
Potential reasons to prefer one or the other:<br>
1. Shuffle is the most compact.<br>
2. Trunc is easier to read.<br>
3. One of these is easier for value tracking.<br>
4. Compatibility with existing IR transforms (eg,
InterleavedAccess recognizes the shuffle form).<br>
</div>
5. We don't create arbitrary shuffle masks in IR because that's
bad for a lot of targets (but maybe this mask pattern should
always be recognized as special?).<br>
</div>
</blockquote>
<br>
Hmm... not sure what the right answer is, but a couple more
observations:<br>
1. If we're going to canonicalize, we should probably canonicalize
the same way independent of the original argument type (so we would
introduce bitcasts either way).<br>
2. Those two functions are only equivalent on little-endian
platforms.<br>
<br>
-Eli<br>
<pre class="moz-signature" cols="72">--
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project</pre>
</body>
</html>