<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" id="owaParaStyle"></style>
</head>
<body fpstyle="1" ocsi="0">
<div style="direction: ltr;font-family: Times New Roman;color: #000000;font-size: 12pt;">
<div>Hi All,</div>
<div><br>
</div>
<div>Clang currently objects when scalar operations are applied to vectors (vector_size), while GCC does not.</div>
<div><br>
</div>
<div>Here is an example for X86:</div>
<div><br>
</div>
<div><font face="Courier New">#include <stdio.h></font></div>
<div><font face="Courier New">#include <xmmintrin.h></font></div>
<div><font face="Courier New"><br>
</font></div>
<div><font face="Courier New">int main(int argc, char* argv[])</font></div>
<div><font face="Courier New">{</font></div>
<div><font face="Courier New">__m128 vec_a = _mm_set_ps(0, 1, 2, 3);</font></div>
<div><font face="Courier New">__m128 vec_b = _mm_set_ps(1, 2, 3, 4);</font></div>
<div><font face="Courier New">__m128 vec_r;</font></div>
<div><font face="Courier New"><br>
</font></div>
<div><font face="Courier New">vec_a = vec_a + 5;</font></div>
<div><font face="Courier New">vec_r = _mm_add_ps(vec_a, vec_b);</font></div>
<div><font face="Courier New"><br>
</font></div>
<div><font face="Courier New">printf("result = { %2.1f, %2.1f, %2.1f, %2.1f }\n", vec_r[0], vec_r[1], vec_r[2], vec_r[3]);</font></div>
<div><font face="Courier New"><br>
</font></div>
<div><font face="Courier New">return 0;</font></div>
<div><font face="Courier New">}</font></div>
<div><br>
</div>
<div>Building this example with Clang will raise a build error:</div>
<div><br>
</div>
<div><font face="Courier New">$ clang -msse x86-simd.c -o x86-simd.exe</font></div>
<div><font face="Courier New">x86-simd.c:10:15: error: cannot convert between vector values of different size ('__m128' (vector of 4 'float' values) and 'int')</font></div>
<div><font face="Courier New">vec_a = vec_a + 5;</font></div>
<div><font face="Courier New">        ~~~~~ ^ ~</font></div>
<div><font face="Courier New">1 error generated.</font></div>
<div><br>
</div>
<div><br>
</div>
<div>Would anyone object to taking a vector x scalar operation to mean that the scalar should be replicated to the same width as the vector, same way GCC does? AFAICS, this is already the case with OpenCl's ext_vector_type.</div>
<div><br>
</div>
<div>This probably could be fixed in Sema::CheckVectorOperands() along with the changes in the test examples (test/Sema/zvector.c and possibly other). How should "-fno-lax-vector-conversions" interfere in those case?</div>
<div><br>
</div>
<div>Please share your opinion. Thanks.</div>
<div><br>
</div>
<div>Regards,</div>
<div>Petar</div>
</div>
</body>
</html>