<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=http://email.email.llvm.org/c/eJytVk2T2ygQ_TXyhZJKQrYkH3zIzOxs5ZSqJIe9uRC0bDISqPjwePLrt0GWxk4mye5mXS5oBP1o-nXTtFq87O71MMpeqgNxR2nJaPTBsIE8S3ckSZXznqlDQu_wT9IPBUkHdjpTknKSJfTxyITYhw_7jsk-4-NIUk1wQsAJW-X7HjEIZ96CxQ2A8LgdGOI04YbZY1K-S_KHJJ_bKp_-fNr08pWWUvHeCyBJeS-HQSpnpMpQ-49rbfxMOq0T2iR0e5moLxgEf1wr68h-PxS0kcT6AeEeyH4Y9hbcVzB6b2URlKN-eXeN_aZ-sQBEV8AoS4raOJPQexK7V5w3EegPEYo3IF6BDDhvVFTkJxfNRuNnXXqjVD9849xp-Bn5GMBadgDSQqcNTBQFWgjGQkLphxMYwxSx2jgQZNRWOqkVzgTjYJAufG5fyF9NRR7e_ZkiIdiR93hK43lYSz5BD1HKrs_wEYTnqPv-I_oEee21frKkl08QA_E1LGab-_40TJ8cMwdwRDDHevaivYsuRJsgHVAP0pHWOQrojNCEYXE7DFK1jk0qZ6FrghL6MVVNEKpZB-c-xaigN_tjBI49zHufm2qPC716UvpZpZhR_pwelF-0Lm15Rx69mjzzzjkTTkoGb13MPGSDKN0ZAOzsi-LYefUslUDCmVBaAfHPjrW48bPs-ykKJmgBncRpYfW-15z1BKOBJOt8SQgSP--9UmwAzFshDFpe5mTJEcC0ellcT3B2k8cDol4fUm9NzgEWWQ7IgZIMD55Za6HMxhDBmcguGXSzOiSXVBg8rJcoh-j5xYJtsK28sqT4fywJZ_ov25-Aw9llMlqBkmHcYWQP6LNv7UFbww7B__mMgExNhLwifZudPwmQX8TEHAB4Wxv4He9855iLI4prExlaJVvvwF7CJ2RAffe7URyyqMPag_mLVLhAAlrwgG08Ig2-o3jzpz0cWJ-iF5026bMU7risnNKURJ0UKRpHrGxYs66W4L00g1nH-FOKJrsJq_VdBya1GAHL8hlvSvqUj36ZQo-meHnczHfA8Cxgl0VYw7BAol8ngU4SPzeT0J2tmaRhuKwa9ciVm2TkaxHoIpWLtM6KK3lZsSw5N_VFsOw0H9t5BTcHOYACI3mcnqPxluRiIflXvP4AgP5jADsC9z37PjreBi6vgC9QP6p3U_sJpjKXbO4QifEjFiFm-FGifzbojebo3BjrD33E_wEfQr7N8N2Cg1iDpi6EzRcMGxx2-KBBwh_rpinzZvv9u-irHEMeYYUl2siDVHg5W-0ND-TirXywoWdo-lR7DSB4KI-GWI5Vxt1Uzs9gQ9GNL7T4PJsfVYJ0Rg9hhHWZdDxfl6JhdFO1BazLgrGCbmvRdS0rNmtWC7GuWrq5wV6JXSm25ZatmHdHbXZf0i8aA3vlTb_7146R1vromU1J1_XquONbsV6LOq_yDRSbdsvqvN5u26oWVZeXOVv1rIXe7pAb5GL1-1vKHc0pzYuixiM3dJ1BDe0mL2jX1LQS1RZvRxgCR_GOxKOuzC5Cth5ZwatTWmdfJ5m18qAAZguddD3s7iNreF-riZrb19wq2rSLBv0NbEBwKg>53247</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Crash on nested _mm_hadd_epi32
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
j-jorge
</td>
</tr>
</table>
<pre>
Compiling this program with `clang++ -O1 -mavx2 -c ./hadd_avx2_fail.cpp -o /dev/null` causes the compiler to crash:
```c++
#include <immintrin.h>
int foo()
{
const __m128i sum = _mm_setzero_si128();
const __m128i sum1 = _mm_hadd_epi32(sum, sum);
const __m128i sum2 = _mm_hadd_epi32(sum1, sum);
return _mm_cvtsi128_si32(sum2);
}
```
The message before the crash is "Overran sorted position", emitted by X86 DAG->DAG Instruction Selection.
Reduced IR code looks like this:
```llvm
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
; Function Attrs: mustprogress nofree nosync nounwind readnone uwtable willreturn
define dso_local i32 @foo() local_unnamed_addr #0 {
entry:
%0 = call <4 x i32> @llvm.x86.ssse3.phadd.d.128(<4 x i32> zeroinitializer, <4 x i32> zeroinitializer) #3
%1 = call <4 x i32> @llvm.x86.ssse3.phadd.d.128(<4 x i32> %0, <4 x i32> zeroinitializer) #3
%vecext.i = extractelement <4 x i32> %1, i32 0
ret i32 %vecext.i
}
; Function Attrs: nofree nosync nounwind readnone
declare <4 x i32> @llvm.x86.ssse3.phadd.d.128(<4 x i32>, <4 x i32>) #1
attributes #0 = { mustprogress nofree nosync nounwind readnone uwtable willreturn "frame-pointer"="none" "min-legal-vector-width"="128" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+avx,+avx2,+cx8,+fxsr,+mmx,+popcnt,+sse,+sse2,+sse3,+sse4.1,+sse4.2,+ssse3,+x87,+xsave" "tune-cpu"="generic" }
attributes #1 = { nofree nosync nounwind readnone }
attributes #2 = { nofree nosync nounwind readnone speculatable willreturn }
attributes #3 = { nounwind }
```
See the [attached archive](https://github.com/llvm/llvm-project/files/7883089/hadd_avx2_fail.zip) for original source, logs, and crash reproducer script.
Tested with clang compiled from commit fc043d8a256b1e431aa1297dffba154a7dd46b25.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJytVkuP2zgM_jXORbBhy0nsHHLozOwseirQ9rC3QJZpRx1ZMvTIZPrrl5JjT9JO293tBoFEmeQnig9RjW5f9vd6GIUUqifuKCwZje4NG8izcEeSbHMumeoTeod_kn4oSDqw05mSlJMsoY9H1raH8OHQMSEzPo4k1QQZLZxwVF5KxCCceQsWNwDC43ZgiNOEG2aPSfkuyR-SfB63-fTn06aXr7QUikvfAknKezEMQjkjVIbaf1xr42fSaZ3QOqG7C6O6YBD8ca2sI4fDUNBaEOsHhHsgh2E4WHBfweiDFUVQjvrl3TX2m_rFAhBdAaMoKWojJ6H3JE6vOG8i0B8iFG9AvAIZcN6oqMhPLpqNxs-69EapevjGudPyM8ZjAGtZD6SBThuYQhTCQjAXEko_nMAYpojVxkFLRm2FE1ohJxgHg3Dhc_NC_qq35OHdnykGBCfyHk9pPA-y5BNIiFR2fYaP0HqOuu8_ok8wrlLrJ0ukeIKYiK9pMdss5WmYPjlmenCkZY5J9qK9iy5EmyAdUA_SkVY5EuiMMIRlcbsM1HYdh1TMRFcHJfRjqupAbGcd5H2KWUFv9scMHCXMe5_r7QEFvXpS-lmlWFH-nPbKL1qXsbwjj15NnnnnnAknJYO3LlYeRoMo3RkAnOyL4jh59SxUiwFnrdIKiH92rMGNn4WUUxZM0C10Atmt1QepOZMEs4Ek63wpCBI_H7xSbACs27Y1aHmZk6VGAMvqZXE9Qe4mjwdEPRlKb03OARajHJBDSDI8eGathTIbQwZnbXapoBvpUFxCYfIwKZAO2fMLgV2wrbyypPh_LAln-i_bn4DD2WUiWoGUYdxhZg_os2_tQVvDDsH_-YyAkZoC8or0bXX-JEF-kRNzAuBtbeB3vPOdYy6OKK5NZGiVaLwDe0mfUAHV3e9mcaiiDnsP1i-GwoUgoAUPOMYj0uA7ijd_KqFnMkUvOm3SZ9G64yI5lSmJOimGaByxs2HPuhLBe2kGs47xpxRNdhNW47sOTGoxAxbxGW8q-pSPfmGhR1O8PG74HTA8C9hFCHsYNkj060TQieLneiK6szUTNQwXqVGPXLmJxngtBF2ocqHWWXFFLxKLyLmuLoRlp_nYziu4OUgPCozgkT1n422QiyXIv4rrDwDoPwawI3Av2ffZ8TZweQV8gfpRv5vGTzC1uWRzh0iMH7EJMcOPAv2zQW_UR-fG2H_oI_57fAj5JsN3Cy5iD5qmkDZfMG1w2eGDBgP-WNV1mde7799FX8UY6gg7LNFG9ELh5Wy1NzwEF2_l3oaZoelT7zWA4KE9GmI5dhl30zk_gw1NN77Q4vNsflS1pDN6CCvsy6Tj-bpsa0Y326aAdVkwVtBd1XZdw4rNmlVtu942dHODvWr3Zbsrd2zlhJOwv4_24E2kpk1v3ykrb-T-X7tLWOujvzYlXVer475rSyjr9Rq6EgqWQ10Xmx3nTbnpKkopW0nWgLR7jBhGaCX2NKc0L4oKj1HTdQYVNJu8oF1d0W273eGNB0Pwe7z3tOlXZh9taDx6Gq9DYZ19ZTJrRa8AZnzm3VGb_Zf0C3JhFc3dR1v_BkzxW0A">