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

    <tr>
        <th>Summary</th>
        <td>
            update_test_checks.py generates malformed check on SLPVectorizer test
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          max-quazan
      </td>
    </tr>
</table>

<pre>
    Not sure whether it's the problem or the script or a subtle bug in SLPVectorizer. Symptom is the following: when I try running
```
./utils/update_test_checks.py --opt-binary=$LLVM_OPT test/Transforms/SLPVectorizer/X86/malformed_phis.ll
```
What I get is
```
define i64 @test_3() #0 {
; CHECK-LABEL: @test_3(
; CHECK-NEXT:  bb:
; CHECK-NEXT:    br label [[BB1:%.*]]
; CHECK:       bb1:
; CHECK-NEXT:    br label [[BB3:%.*]]
; CHECK:       bb2:
; CHECK-NEXT:    br label [[BB3]]
; CHECK:       bb3:
; CHECK-NEXT:    [[TMP:%.*]] = phi i32 [ undef, [[BB1]] ], [ undef, [[BB2:%.*]] ]
; CHECK-NEXT:    [[TMP4:%.*]] = phi i32 [ undef, [[BB1]] ], [ undef, [[BB2]] ]
; CHECK-NEXT:    [[TMP0:%.*]] = insertelement <16 x i32> poison, i32 [[TMP4]], i32 0
; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <16 x i32> [[TMP0]], i32 [[TMP4]], i32 1
; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <16 x i32> [[TMP1]], i32 [[TMP4]], i32 2
; CHECK-NEXT:    [[TMP3:%.*]] = insertelement <16 x i32> [[TMP2]], i32 [[TMP4]], i32 3
; CHECK-NEXT:    [[TMP4:%.*]] = insertelement <16 x i32> [[TMP3]], i32 [[TMP4]], i32 4
; CHECK-NEXT:    [[TMP5:%.*]] = insertelement <16 x i32> [[TMP4]], i32 [[TMP4]], i32 5
; CHECK-NEXT:    [[TMP6:%.*]] = insertelement <16 x i32> [[TMP5]], i32 [[TMP4]], i32 6
; CHECK-NEXT:    [[TMP7:%.*]] = insertelement <16 x i32> [[TMP6]], i32 [[TMP4]], i32 7
; CHECK-NEXT:    [[TMP8:%.*]] = insertelement <16 x i32> [[TMP7]], i32 [[TMP4]], i32 8
; CHECK-NEXT:    [[TMP9:%.*]] = insertelement <16 x i32> [[TMP8]], i32 [[TMP4]], i32 9
; CHECK-NEXT:    [[TMP10:%.*]] = insertelement <16 x i32> [[TMP9]], i32 [[TMP4]], i32 10
; CHECK-NEXT:    [[TMP11:%.*]] = insertelement <16 x i32> [[TMP10]], i32 [[TMP4]], i32 11
; CHECK-NEXT:    [[TMP12:%.*]] = insertelement <16 x i32> [[TMP11]], i32 [[TMP4]], i32 12
; CHECK-NEXT:    [[TMP13:%.*]] = insertelement <16 x i32> [[TMP12]], i32 [[TMP4]], i32 13
; CHECK-NEXT:    [[TMP14:%.*]] = insertelement <16 x i32> [[TMP13]], i32 [[TMP4]], i32 14
; CHECK-NEXT:    [[TMP15:%.*]] = insertelement <16 x i32> [[TMP14]], i32 [[TMP4]], i32 15
; CHECK-NEXT:    [[TMP16:%.*]] = insertelement <32 x i32> poison, i32 [[TMP4]], i32 0
; CHECK-NEXT:    [[TMP17:%.*]] = insertelement <32 x i32> [[TMP16]], i32 [[TMP4]], i32 1
; CHECK-NEXT:    [[TMP18:%.*]] = insertelement <32 x i32> [[TMP17]], i32 [[TMP4]], i32 2
; CHECK-NEXT:    [[TMP19:%.*]] = insertelement <32 x i32> [[TMP18]], i32 [[TMP4]], i32 3
; CHECK-NEXT:    [[TMP20:%.*]] = insertelement <32 x i32> [[TMP19]], i32 [[TMP4]], i32 4
; CHECK-NEXT:    [[TMP21:%.*]] = insertelement <32 x i32> [[TMP20]], i32 [[TMP4]], i32 5
; CHECK-NEXT:    [[TMP22:%.*]] = insertelement <32 x i32> [[TMP21]], i32 [[TMP4]], i32 6
; CHECK-NEXT:    [[TMP23:%.*]] = insertelement <32 x i32> [[TMP22]], i32 [[TMP4]], i32 7
; CHECK-NEXT:    [[TMP24:%.*]] = insertelement <32 x i32> [[TMP23]], i32 [[TMP4]], i32 8
; CHECK-NEXT:    [[TMP25:%.*]] = insertelement <32 x i32> [[TMP24]], i32 [[TMP4]], i32 9
; CHECK-NEXT:    [[TMP26:%.*]] = insertelement <32 x i32> [[TMP25]], i32 [[TMP4]], i32 10
; CHECK-NEXT:    [[TMP27:%.*]] = insertelement <32 x i32> [[TMP26]], i32 [[TMP4]], i32 11
; CHECK-NEXT:    [[TMP28:%.*]] = insertelement <32 x i32> [[TMP27]], i32 [[TMP4]], i32 12
; CHECK-NEXT:    [[TMP29:%.*]] = insertelement <32 x i32> [[TMP28]], i32 [[TMP4]], i32 13
; CHECK-NEXT:    [[TMP30:%.*]] = insertelement <32 x i32> [[TMP29]], i32 [[TMP4]], i32 14
; CHECK-NEXT:    [[TMP31:%.*]] = insertelement <32 x i32> [[TMP30]], i32 [[TMP4]], i32 15
; CHECK-NEXT:    [[TMP32:%.*]] = insertelement <32 x i32> [[TMP31]], i32 [[TMP4]], i32 16
; CHECK-NEXT:    [[TMP33:%.*]] = insertelement <32 x i32> [[TMP32]], i32 [[TMP4]], i32 17
; CHECK-NEXT:    [[TMP34:%.*]] = insertelement <32 x i32> [[TMP33]], i32 [[TMP4]], i32 18
; CHECK-NEXT:    [[TMP35:%.*]] = insertelement <32 x i32> [[TMP34]], i32 [[TMP4]], i32 19
; CHECK-NEXT:    [[TMP36:%.*]] = insertelement <32 x i32> [[TMP35]], i32 [[TMP4]], i32 20
; CHECK-NEXT:    [[TMP37:%.*]] = insertelement <32 x i32> [[TMP36]], i32 [[TMP4]], i32 21
; CHECK-NEXT:    [[TMP38:%.*]] = insertelement <32 x i32> [[TMP37]], i32 [[TMP4]], i32 22
; CHECK-NEXT:    [[TMP39:%.*]] = insertelement <32 x i32> [[TMP38]], i32 [[TMP4]], i32 23
; CHECK-NEXT:    [[TMP40:%.*]] = insertelement <32 x i32> [[TMP39]], i32 [[TMP4]], i32 24
; CHECK-NEXT:    [[TMP41:%.*]] = insertelement <32 x i32> [[TMP40]], i32 [[TMP4]], i32 25
; CHECK-NEXT:    [[TMP42:%.*]] = insertelement <32 x i32> [[TMP41]], i32 [[TMP4]], i32 26
; CHECK-NEXT:    [[TMP43:%.*]] = insertelement <32 x i32> [[TMP42]], i32 [[TMP4]], i32 27
; CHECK-NEXT:    [[TMP44:%.*]] = insertelement <32 x i32> [[TMP43]], i32 [[TMP4]], i32 28
; CHECK-NEXT:    [[TMP45:%.*]] = insertelement <32 x i32> [[TMP44]], i32 [[TMP4]], i32 29
; CHECK-NEXT:    [[TMP46:%.*]] = insertelement <32 x i32> [[TMP45]], i32 [[TMP4]], i32 30
; CHECK-NEXT:    [[TMP47:%.*]] = insertelement <32 x i32> [[TMP46]], i32 [[TMP4]], i32 31
; CHECK-NEXT:    [[TMP48:%.*]] = call i32 @llvm.vector.reduce.mul.v32i32(<32 x i32> [[TMP47]])
; CHECK-NEXT:    [[TMP49:%.*]] = call i32 @llvm.vector.reduce.mul.v16i32(<16 x i32> [[TMP15]])
; CHECK-NEXT:    [[OP_RDX:%.*]] = mul i32 [[TMP48]], [[TMP49]]
; CHECK-NEXT:    [[OP_RDX1:%.*]] = mul i32 [[OP_RDX]], [[TMP4]]
; CHECK-NEXT:    [[OP_RDX2:%.*]] = mul i32 [[OP_RDX1]], [[TMP4]]
; CHECK-NEXT:    [[OP_RDX3:%.*]] = mul i32 [[OP_RDX2]], [[TMP4]]
; CHECK-NEXT:    [[OP_RDX4:%.*]] = mul i32 [[OP_RDX3]], [[TMP4]]
; CHECK-NEXT:    [[OP_RDX5:%.*]] = mul i32 [[OP_RDX4]], [[TMP4]]
; CHECK-NEXT:    [[OP_RDX6:%.*]] = mul i32 [[OP_RDX5]], [[TMP4]]
; CHECK-NEXT:    [[OP_RDX7:%.*]] = mul i32 [[OP_RDX6]], [[TMP4]]
; CHECK-NEXT:    [[OP_RDX8:%.*]] = mul i32 [[OP_RDX7]], [[TMP4]]
; CHECK-NEXT:    [[OP_RDX9:%.*]] = mul i32 [[OP_RDX8]], [[TMP4]]
; CHECK-NEXT:    [[OP_RDX10:%.*]] = mul i32 [[OP_RDX9]], [[TMP4]]
; CHECK-NEXT:    [[OP_RDX11:%.*]] = mul i32 [[OP_RDX10]], [[TMP4]]
; CHECK-NEXT:    [[OP_RDX12:%.*]] = mul i32 [[OP_RDX11]], [[TMP]]
; CHECK-NEXT:    [[TMP64:%.*]] = add i32 undef, [[OP_RDX12]]
; CHECK-NEXT:    [[TMP65:%.*]] = sext i32 [[TMP64]] to i64
; CHECK-NEXT:    ret i64 [[TMP65]]
;
bb:
  br label %bb1

bb1:                                              ; preds = %bb
  br label %bb3

bb2:                                              ; No predecessors!
  br label %bb3

bb3:                                              ; preds = %bb2, %bb1
  %tmp = phi i32 [ undef, %bb1 ], [ undef, %bb2 ]
  %tmp4 = phi i32 [ undef, %bb1 ], [ undef, %bb2 ]
  %tmp5 = mul i32 %tmp, %tmp4
  %tmp6 = mul i32 %tmp5, %tmp4
  %tmp7 = mul i32 %tmp6, %tmp4
  %tmp8 = mul i32 %tmp7, %tmp4
  %tmp9 = mul i32 %tmp8, %tmp4
  %tmp10 = mul i32 %tmp9, %tmp4
  %tmp11 = mul i32 %tmp10, %tmp4
  %tmp12 = mul i32 %tmp11, %tmp4
  %tmp13 = mul i32 %tmp12, %tmp4
  %tmp14 = mul i32 %tmp13, %tmp4
  %tmp15 = mul i32 %tmp14, %tmp4
  %tmp16 = mul i32 %tmp15, %tmp4
  %tmp17 = mul i32 %tmp16, %tmp4
  %tmp18 = mul i32 %tmp17, %tmp4
  %tmp19 = mul i32 %tmp18, %tmp4
  %tmp20 = mul i32 %tmp19, %tmp4
  %tmp21 = mul i32 %tmp20, %tmp4
  %tmp22 = mul i32 %tmp21, %tmp4
  %tmp23 = mul i32 %tmp22, %tmp4
  %tmp24 = mul i32 %tmp23, %tmp4
  %tmp25 = mul i32 %tmp24, %tmp4
  %tmp26 = mul i32 %tmp25, %tmp4
  %tmp27 = mul i32 %tmp26, %tmp4
  %tmp28 = mul i32 %tmp27, %tmp4
  %tmp29 = mul i32 %tmp28, %tmp4
  %tmp30 = mul i32 %tmp29, %tmp4
  %tmp31 = mul i32 %tmp30, %tmp4
  %tmp32 = mul i32 %tmp31, %tmp4
  %tmp33 = mul i32 %tmp32, %tmp4
  %tmp34 = mul i32 %tmp33, %tmp4
  %tmp35 = mul i32 %tmp34, %tmp4
  %tmp36 = mul i32 %tmp35, %tmp4
  %tmp37 = mul i32 %tmp36, %tmp4
  %tmp38 = mul i32 %tmp37, %tmp4
  %tmp39 = mul i32 %tmp38, %tmp4
  %tmp40 = mul i32 %tmp39, %tmp4
  %tmp41 = mul i32 %tmp40, %tmp4
  %tmp42 = mul i32 %tmp41, %tmp4
  %tmp43 = mul i32 %tmp42, %tmp4
  %tmp44 = mul i32 %tmp43, %tmp4
  %tmp45 = mul i32 %tmp44, %tmp4
  %tmp46 = mul i32 %tmp45, %tmp4
  %tmp47 = mul i32 %tmp46, %tmp4
  %tmp48 = mul i32 %tmp47, %tmp4
  %tmp49 = mul i32 %tmp48, %tmp4
  %tmp50 = mul i32 %tmp49, %tmp4
  %tmp51 = mul i32 %tmp50, %tmp4
  %tmp52 = mul i32 %tmp51, %tmp4
  %tmp53 = mul i32 %tmp52, %tmp4
  %tmp54 = mul i32 %tmp53, %tmp4
  %tmp55 = mul i32 %tmp54, %tmp4
  %tmp56 = mul i32 %tmp55, %tmp4
  %tmp57 = mul i32 %tmp56, %tmp4
  %tmp58 = mul i32 %tmp57, %tmp4
  %tmp59 = mul i32 %tmp58, %tmp4
  %tmp60 = mul i32 %tmp59, %tmp4
  %tmp61 = mul i32 %tmp60, %tmp4
  %tmp62 = mul i32 %tmp61, %tmp4
  %tmp63 = mul i32 %tmp62, %tmp4
  %tmp64 = add i32 undef, %tmp63
  %tmp65 = sext i32 %tmp64 to i64
  ret i64 %tmp65
}
```
The bug is that TMP4 is declared twice:
```
; CHECK-NEXT:    [[TMP4:%.*]] = phi i32 [ undef, [[BB1]] ], [ undef, [[BB2]] ]
; CHECK-NEXT:    [[TMP4:%.*]] = insertelement <16 x i32> [[TMP3]], i32 [[TMP4]], i32 4
```
So these auto-generated checks fail.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzVm29z2kYQhz-NeHNjhtu9E-YFL_wv006dxNN40rzzCDgbtQJRScRxP33vBHYE3nUWn9OZZphgwer2Jz3o8QlLk3L2MP5QNqpeV07dz10zd5XKmwSGtfI_q1VVTgq3UGXVLtbTKl81YSnzq0yawqnJ-k7lS_Xp8uqzmzZllf_jqr769LBYNeVC5ZthbsuiKO_z5V2CJ6HNUv2qmupBVevlMrw6OE8GJ0k62D7axX4C79ZNXtTheTXLGnfTuLq5mc7d9K-6v3pQR0flqjma5MusekjwPAFzefn5_c3Hq2sVKv1611W2rG_LahEG2Ynol78cp_7_RVaEAje7Wc3zul8UZJg_5lnjM9-5xm8SWTFzt_nSqTw1KjGDNikmcJzASCWAA5UMT7fr4ak6--Xi7Lejy5PTi8uwR3ZW2Cv6cPHlOtSoycQ_se_69ytVZBNXqMSe-sfpqQ71YP1-PEnseXjsrrxdL6w60QeOjQeMDQeP_aMR8eURNwNdv7_aD6n8p0R5zCpHCFVqvfTYEjjr7LNtoX_avPy8Bp4P-ywtGcf8rDwHpRiQKfJl7arG-WPdLRv_yplO1beQK8ELtSrzulyGntugj9uzAbV9fSDp_uxD-ePuneQ7_bgcWpKDgCjOoWU5QJLj2YF0QA6Q5cDXfzZlOVCWw0hy2IgcRpbDSnKkETmsLEcqyTGMyJHKcgwlOY4jcgxlOfhffZ0co4gcx7IcI5HHXqHRzkbIRCYzaoxStdSpIqnqKKsKtapFXtUxYtVCs2qRWnWMW7VQrlpkVx2jVy30qxYJVgsN6wf8KfMQoVi77bvZ324mooVqpZMI3So7ZoRypZMI7So6ZEBoVzqJUK-iIwaEdiWTgNCuogMGhHKlkwjlKpqTgNCtdBKhW0WzEhCqlU4iVKtoXgJCs9JJhGYVzUzgFWLtbsYbTk0gRrIglazsfC_GsiC0rGxqAjGaBaFmZVMTjPEsSKexItFijGhROo0VmRZjTIvSaaxItRijWpROY0WuxRjXonQaK5ItxsgWpdNYkW0xxrYotC2IbIsxtkWhbUFkW4yxLUrntLIv2GJsi0Lbguw7thjbotC2ILKtibGtEdoWRLY1MbY10u9iRbY1MbY1QtuCyLYmxrZGaNsX_trUjRJjWyO0LYhsa2Jsa4S2RZFtTYxtjdC2KLKtoW07zYpiM7oZFMXXRf9r-9fPfuVm66nrL9ZF_ytCiBYmx0zQJxfL-NCylSTR6VMS-tsnK0_y8erm9_MvZBTfa2-PdxTf3Y7Ni7JOtEx3W20zEb0OakXLkmqlo3vRNqR6QXQvWndUL4zuRfuM6mWie9HConrZ6F60kaheaXQvWjlUr2F0L1oqVC_yWD7sUKbnaFSzUXwzuTi6f6h5bbcD3EHJQ9jMV6b00ZzNZm2nvSsYntLJx6eP4Np9a3blnm73kGrKcGXOC2NX4cqecO1Op8duns0PnatwupeugA3X0GxKt3U6ebpiRfgvBFv534l1uzXtmHQn3O0Er-r0oWybuamr67Kqk8czux80w7fYLGjpd3aaCkvNYvXCFTFttfr-odx7C9QTrMfBzJuOZnePlva1bX3otVucEsWWrR4S1SlbfUxUD9nqEVF9zFbrAVE-4ss1Ue5VxdYDVa_5eqTqga83VD3y9RRUbfh6iqvmwWqKrObRaoqt5uFqiq7m8QKFV_N8geILPF-g-ALPFyi-wPMFii_wfIHiCzxfoPgCzxcovsDzBYov8HyB4gs8X6T4As8XKb7I80WKL_J8keKLPF-k-CLPFym-yPNFii_yfJHiizxfpPgizxcpvsjzNRRf5Pkaiq_h-RqKr-H5Goqv4fkaiq_h-RqKr-H5Goqv4fkaiq_h-RqKr-H5Goqv4flaiq_h-VqKr-X5Woqv5flaiq_l-VqKr-X5Woqv5flacl7F87UUX8vztRRfy_O1FF_L800pvpbnm1J8U55vSvFNeb4pxTfl-aaGOZHbjrZXbfdOyx7H6J6NdU69tittzzeGj6deu_dZXM-395yEO0uyRoXT4LDgT2SKzJ9lqOY-n7qnk7S9tf8PF-j_h5di7-6cT2W4Wad2Kls35dGdW7oqa_we3dxxo26zvOj3ZmOcjXCU9Zq8KdyYvjPncd1aPd1esxlFlXu3CrV36vTWVTGeN82qbjf9nX_c5c18PelPy4VfCN8Zb5-OVlX5p1_bL-Z1vXbhxh5rMbW9-fjW6pGdmGzmRu52akbgbmcjPRjgSFuYDHWvPautx2GvACzdvWqHSNpLknr5GAYAA-tXSI0xx_2pwclsYI2GyWg4nWaJGbhF2AftV9hldderxm0k_3Gswzfbed3U39_M6jq_WzrXtvPj-506L6vxIvt29Pc6-ydb9tru4zb9v6EbJSo">