<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p>Hi,<br>
<br>
I have come across a major regression resulting after SLP
vectorization (+18% on SystemZ, just for enabling SLP). This all
relates to one particular very hot loop.<br>
<br>
Scalar code:<br>
%conv252 = zext i16 %110 to i64<br>
%conv254 = zext i16 %111 to i64<br>
%sub255 = sub nsw i64 %conv252, %conv254<br>
... repeated<br>
<br>
SLP output:<br>
%101 = zext <16 x i16> %100 to <16 x i64><br>
%104 = zext <16 x i16> %103 to <16 x i64><br>
%105 = sub nsw <16 x i64> %101, %104<br>
%106 = trunc <16 x i64> %105 to <16 x i32><br>
<i>for each element e 0:15</i><br>
%107 = extractelement <16 x i32> %106, i32 e<br>
%108 = sext i32 %107 to i64<br>
<br>
The vectorized code should in this case only have to be<br>
<br>
%101 = zext <16 x i16> %100 to <16 x i64><br>
%104 = zext <16 x i16> %103 to <16 x i64><br>
%105 = sub nsw <16 x i64> %101, %104<br>
<i>for each element e 0:15</i><br>
%107 = extractelement <16 x i64> %105, i32 e<br>
<br>
,but this does not get handled so for all the 16 elements,
extracts *and extends* are done.<br>
<br>
I see that there is a special function in SLP vectorizer that does
this truncation and extract+extend whenever possible. Is this the
place to fix this?<br>
<br>
Or would it be better to rely on InstCombiner?<br>
<br>
Is this truncation done by SLP with the assumption that it is free
to extend an extracted element? On SystemZ, this is not true.<br>
<br>
/Jonas<br>
<br>
</p>
</body>
</html>