<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/72433>72433</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            InstCombine fails to reach fixpoint after 1 iteration
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            llvm:instcombine
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          topperc
      </td>
    </tr>
</table>

<pre>
    This test file fails InstCombine with `LLVM ERROR: Instruction Combining did not reach a fixpoint after 1 iterations`

```
define i32 @not_last_operation(i32 %p, i32 %val) { 
entry: 
  %tobool = icmp eq i32 %p, 0 
  %0 = zext i1 %tobool to i32 
  %1 = sub i32 2, %0 
  br i1 false, label %scalar.ph, label %vector.ph                                
 
vector.ph: ; preds = %entry               
  %2 = mul i32 20, %1                                                            
 %ind.end = add i32 %val, %2 
  %.splatinsert = insertelement <4 x i32> poison, i32 %val, i64 0 
  %.splat = shufflevector <4 x i32> %.splatinsert, <4 x i32> poison, <4 x i32> zeroinitializer
  %.splatinsert2 = insertelement <4 x i32> poison, i32 %1, i64 0                 
  %.splat3 = shufflevector <4 x i32> %.splatinsert2, <4 x i32> poison, <4 x i32> zeroinitializer
  %3 = mul <4 x i32> <i32 0, i32 1, i32 2, i32 3>, %.splat3 
  %induction = add <4 x i32> %.splat, %3 
  %4 = mul i32 %1, 4 
  %.splatinsert4 = insertelement <4 x i32> poison, i32 %4, i64 0                 
  %.splat5 = shufflevector <4 x i32> %.splatinsert4, <4 x i32> poison, <4 x i32> zeroinitializer
 %broadcast.splatinsert = insertelement <4 x i1> poison, i1 %tobool, i64 0 
  %broadcast.splat = shufflevector <4 x i1> %broadcast.splatinsert, <4 x i1> poison, <4 x i32> zeroinitializer
  br label %vector.body 
 
vector.body: ; preds = %vector.body, %vector.ph
  %index = phi i32 [ 0, %vector.ph ], [ %index.next, %vector.body ]              
 %vec.ind = phi <4 x i32> [ %induction, %vector.ph ], [ %vec.ind.next, %vector.body ]
  %5 = zext <4 x i1> %broadcast.splat to <4 x i32> 
  %6 = xor <4 x i32> %5, <i32 1, i32 1, i32 1, i32 1>                            
  %7 = add nsw <4 x i32> %vec.ind, %6 
  %index.next = add nuw i32 %index, 4                                            
  %vec.ind.next = add <4 x i32> %vec.ind, %.splat5                               
  %8 = icmp eq i32 %index.next, 20                                               
  br i1 %8, label %middle.block, label %vector.body, !llvm.loop !0               
 
middle.block:                                     ; preds = %vector.body 
  %9 = extractelement <4 x i32> %7, i32 3 
  br i1 false, label %exit, label %scalar.ph 
 
scalar.ph: ; preds = %entry, %middle.block
  %bc.resume.val = phi i32 [ 20, %middle.block ], [ 0, %entry ]                  
  %bc.resume.val1 = phi i32 [ %ind.end, %middle.block ], [ %val, %entry ]        
  br label %for.body                                                             
 
for.body:                                         ; preds = %for.body, %scalar.ph
  %inc613.1 = phi i32 [ %bc.resume.val, %scalar.ph ], [ %inc6.1, %for.body ]     
  %inc511.1 = phi i32 [ %bc.resume.val1, %scalar.ph ], [ %inc5.1, %for.body ]    
  %10 = zext i1 %tobool to i32 
  %inc4.1 = xor i32 %10, 1 
  %inc511.1.inc4.1 = add nsw i32 %inc511.1, %inc4.1                              
  %inc5.1 = add nsw i32 %inc511.1.inc4.1, 1                                      
 %inc6.1 = add nsw i32 %inc613.1, 1 
  %exitcond.1 = icmp eq i32 %inc6.1, 22 
  br i1 %exitcond.1, label %exit, label %for.body, !llvm.loop !3 
 
exit:                                             ; preds = %middle.block, %for.body
  %inc511.1.inc4.1.lcssa = phi i32 [ %inc511.1.inc4.1, %for.body ], [ %9, %middle.block ]
  %inc.2 = add nsw i32 %inc511.1.inc4.1.lcssa, 2                                 
  ret i32 %inc.2                                                                 

 
!0 = distinct !{!0, !1, !2} 
!1 = !{!"llvm.loop.isvectorized", i32 1} 
!2 = !{!"llvm.loop.unroll.runtime.disable"} 
!3 = distinct !{!3, !2, !1}
```

I haven't tried to reduce it yet.

CC: @nikic 
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysWEtv2zoW_jX0hqggkXrECy8SOwEKdDBAMZhtQYlUzCktaUgqdfPrL_iQ9bBky7c3CBKZPOc7T348FlGKv1eM7UDyApLDhrT6WMudrpuGyWKT1_T37j9HrqBmSsOSCwZLwoWCXyul9_Up5xWDv7g-QpCG377991_w9fv3f38H-NlKyLbQvK6gk-TVO6ScwqrWUDJSHCGBJT83Na80JKVmEkaQayaJUVIgDUF4AOGz_5uG_td-pKw0tjlGEMRhVesfgij9o268OkBPdg8lDUB76J8_iABoC0H2Ah0Mq7T8bdx1H6ER0nVe1wICfIC8ODWQ_R8OocKhbGjFPtlZQx4NlHXtdHrJyEqqNrcbyCA5fS-SS4NQEqGY2RMkZ8JIqIIIIoPmOFr9YIWuzSq88-Ph3b-Llo0Yv8BGMqqsYwAlNhfz6mYbWblTK1wAoY8guufBGu9QwisasIpaG4TSUcH23nzvS6AaQTSvFJPaFco-MsFOrDIr-xieDQbAr7CpuTINsZ-A8jQeF9Ohujod27IUzCVsgjexb_1bMDhe_2Sy5hXXnAj-yeRCPOjxgKI-nIUM90bwo_GhfyJAfGmeiS28NzGEXTBR94C6Bwzwq2-BSwA9Lq-o55iucRZi8RAj5XjU0V0e46VGix8vTPxAYZJHCxP_aWEASnJZE1oQpVeeqGgS5oDzZo_UBP9GiJGPcNajYUTR3-jAXF5Rp7nbZtnRbMzy43DfdVPPp6OOZGer0hy564PkBYZTDQiSg11LXi5aQcXOeizovEwOS7T5wYqAe9o09iYNcwF3h-SOEx7shhuDOJP-5rtTQnMZTvzqYVILc57r9cSXd8QLcw_4dcUdYxCzC0tU6te1QR-_Dz2F06raxPQQ7a_umNtdxx2PX37TzC8z2di_jjVWG3maG2nGjYeueWodvJtejJHRmHLilAoW5KIufs7NL_1ZioT4OAWirhvzYerG6JyOQPHzOj9vHOZhjrZ2n521JMUCyZs-ulxOd8c3duZ6fp4bB9WPeYujma_7KPwB0xaBZKo9seCDiCv-uYxrQ-3h8e_23RB4xTiTVhoZi66s9fPcHaujCe_K9Bx7l13R_uRnlPlywPmrAaYFKscXQ1_NIYUUaYSD2WyN8jnFuLoqijSIvFA5vSPGBpMoWmEwum8xWbQ4_Iqz_tsQr4rYe2a4v5u_bBdGc0EEA42OwC8U5kS8g15wTQP0wd3C9aadaw_1V1esBXTbDlcRG8Yo6op6tSu-7qqP0DX79rq3Sai8wb14fDys7gNHY_Z4TO-BoQuLtQ5EoRSZJ5erykw6c9C92yUOGhkO0IoWcB7Z5K_tASiZHqAF9xXXAYPsMK6TvTVNCJQrzatCm1qC7MWs-zL7REWoVzarvkheGCB0aYeAK3dP8k9GAUL9yDUEQDcA2krWQgSyrTQ_sYByRXLBDNQQAS84ji8OdwFkh9m3Qe7vV3gkH6wCKNNQS86oIR7JaFswyDX8zXQwFN_v7V0bhxX_yQu4oTtMt3hLNmwXZWEYPoUJzjbHHSopSQkmWR5n0dMWZzRKacnKbbR9Smkab_gOhQhHUZSgECc4C9LyiW6TNCVxmpcMhSAO2YlwEdjE1PJ9w5Vq2S5DMcYbeyqVfQXnUgfwM6-ULtz7NZOs5LCRO7P1JW_fFYhDwZVWPZzmWrDd8KWce01n4yfF8cZ7tk0rxe6odaMAfgboDaC3d66PbR4U9QmgN-uQ-_elkfX_WKEBerP-K4DebAh_BQAA___Bkltu">