<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">