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

    <tr>
        <th>Summary</th>
        <td>
            i8 bool accumulator not converted to i1
        </td>
    </tr>

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

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

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

<pre>
    ```
define zeroext i1 @test(ptr %ptr.base, i64 %len) {
start:
  %end = getelementptr inbounds i64, ptr %ptr.base, i64 %len
  %len.zero = icmp eq i64 %len, 0
  br i1 %len.zero, label %exit, label %loop

loop:
  %accum = phi i8 [ %accum.next, %loop ], [ 1, %start ]
  %ptr = phi ptr [ %ptr.next, %loop ], [ %ptr.base, %start ]
  %ptr.next = getelementptr inbounds i64, ptr %ptr, i64 1
  %accum.bool = icmp ne i8 %accum, 0
  %val = load i64, ptr %ptr, align 8
  %val.zero = icmp eq i64 %val, 0
  %and = and i1 %accum.bool, %val.zero
  %accum.next = zext i1 %and to i8
  %exit.cond = icmp eq ptr %ptr.next, %end
  br i1 %exit.cond, label %exit, label %loop

exit:
  %res = phi i1 [ true, %start ], [ %and, %loop ]
  ret i1 %res
}
```
This stays invariant under `-O2`. It should be possible to narrow `%accum` to i1, resulting in the following IR:
```
define zeroext i1 @test(ptr %ptr.base, i64 %len) {
start:
  %end = getelementptr inbounds i64, ptr %ptr.base, i64 %len
  %len.zero = icmp eq i64 %len, 0
  br i1 %len.zero, label %exit, label %loop

loop:
  %accum.bool = phi i1 [ %accum.next, %loop ], [ true, %start ]
  %ptr = phi ptr [ %ptr.next, %loop ], [ %ptr.base, %start ]
  %ptr.next = getelementptr inbounds i64, ptr %ptr, i64 1
  %val = load i64, ptr %ptr, align 8
  %val.zero = icmp eq i64 %val, 0
  %accum.next = and i1 %accum.bool, %val.zero
  %exit.cond = icmp eq ptr %ptr.next, %end
  br i1 %exit.cond, label %exit, label %loop

exit:
  %res = phi i1 [ true, %start ], [ %accum.next, %loop ]
  ret i1 %res
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztVduOmzAQ_Rp4sRZhQwg88LAXRdqnSlV_wMBscOvYqW2yl6_v2JCQZC_a9KHSSpUQYI99Zub4cGh091xHRTpd6V2UXnfwIBSQFzAanhwRlER56sC6iJVbZ0jEFvhIGm4hYrdEFLmfkqAiVpFoeTOiWMeNi7LrcUT8ElAdibI7sgYHEjagnIcTqtGD6qwH8ngfp5jRcJT4GgOkaDdbAr9Pirkl6X55Y0Ib8yYflbwBGep6Eu5kQmq9HbeO9zA-aYW37bAJmbe9IKIk0eLmMJ8o5M0DTlAYvAtDXEOn-UBPCMygofMJMryPmJ6JDxDPuHofO4BcdAB77ul550mjtZyJR7V4CqbgCfM4uePjUql593YOLsVakfJ0z7uHi7HzFHxSln-OBz2XOZGyR3zVyoGVl73aRzynsalj9aJKklZPmfY1Han16IxQ6a-kd9h_mfbCghPtGbCz8mjQgDPD68Of9cHHpMfimeAM7FtG1Cntcoqe2cKPXliC6M8oFLXjRnDlCOoGkIAivfrG8J6Qe0dsrwfZkQbIVlsrGgmeS8WN0Y9-6UEnRRpIDp8Eph-kE2qN4MT1QB60lPrRT9x_P_T_36n-zqnm7_VINJ-xqzeF9cUc61_4z6mTXGZDX9lY3tXPJf4SQ02LgpZLmmdV3NVZV2UVj51wEmr8sQTxhlSD5E4borQj2PAOjIPRqGk8GFn3zm2t74mt8FoL1w8NMoN_pJWUu_3jamv0T2ix5JWwdsC62GqxzPMy7uusrKDtsuqhog10LKeLCtKsWaQsTyktmjjQaWvsP2JMwSMJEPiOTceiZiljaZmlNF8saZXQZdkUrCqqouuggBbtCTZcyMTXkWizjk0dSmqGtcWgFNbZOcjRPtcKIKRDfD64XptaiV-ijUPiOhT-B2Cizwc">