1/* { dg-do compile } */ 2/* { dg-require-effective-target sse4 } */ 3/* { dg-options "-msse4.2 -O3" } */ 4/* { dg-final { scan-assembler-times "(?:vmovd|movd)\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]" 3 } } */ 5/* { dg-final { scan-assembler-times "(?:vpaddd|paddd)\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]" 2 } } */ 6/* { dg-final { scan-assembler-times "(?:vpinsrd|pinsrd)\[ \\t\]+\[^\{\n\]*%xmm\[0-9\]" 1 } } */ 7/* { dg-final { scan-assembler-not "vmovss" } } */ 8 9#include <immintrin.h> 10 11int 12main (int a, int b) 13{ 14 int res; 15 16 __m128i xa, xb, xres; 17 18 xa = _mm_insert_epi32 (xa, a, 0); 19 xb = _mm_insert_epi32 (xb, b, 0); 20 21 xres = _mm_add_epi32 (xa, xb); 22 23 res = _mm_extract_epi32 (xres, 0); 24 25 xres = _mm_insert_epi32 (xres, res, 0); 26 xb = _mm_insert_epi32 (xb, b, 0); 27 28 xres = _mm_add_epi32 (xres, xb); 29 30 res = _mm_extract_epi32 (xres, 0); 31 32 return res; 33} 34 35