<html>
<head>
<base href="https://bugs.llvm.org/">
</head>
<body><table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Bug ID</th>
<td><a class="bz_bug_link
bz_status_NEW "
title="NEW - Condition not constant folded"
href="https://bugs.llvm.org/show_bug.cgi?id=49389">49389</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>Condition not constant folded
</td>
</tr>
<tr>
<th>Product</th>
<td>libraries
</td>
</tr>
<tr>
<th>Version</th>
<td>trunk
</td>
</tr>
<tr>
<th>Hardware</th>
<td>PC
</td>
</tr>
<tr>
<th>OS</th>
<td>All
</td>
</tr>
<tr>
<th>Status</th>
<td>NEW
</td>
</tr>
<tr>
<th>Severity</th>
<td>enhancement
</td>
</tr>
<tr>
<th>Priority</th>
<td>P
</td>
</tr>
<tr>
<th>Component</th>
<td>Scalar Optimizations
</td>
</tr>
<tr>
<th>Assignee</th>
<td>unassignedbugs@nondot.org
</td>
</tr>
<tr>
<th>Reporter</th>
<td>jmuizelaar@mozilla.com
</td>
</tr>
<tr>
<th>CC</th>
<td>llvm-bugs@lists.llvm.org
</td>
</tr></table>
<p>
<div>
<pre>#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#define N 1234
bool eat_digits(uint8_t s[N]) {
size_t i = 0;
while (i < N) {
uint8_t c = s[i];
if ('0' <= c && c <= '9') {
i += 1;
} else {
break;
}
}
return i <= N;
}
compiles to:
eat_digits: # @eat_digits
xor ecx, ecx
.LBB0_1: # =>This Inner Loop Header: Depth=1
mov rax, rcx
cmp rcx, 1234
je .LBB0_3
movzx edx, byte ptr [rdi + rax]
add dl, -48
lea rcx, [rax + 1]
cmp dl, 10
jb .LBB0_1
.LBB0_3:
cmp rax, 1235
setb al
ret
GCC is able to compile it to:
eat_digits:
mov eax, 1
ret
Adding -mllvm -enable-constraint-elimination doesn't help.
This is originally from: <a href="https://github.com/rust-lang/rust/issues/81432">https://github.com/rust-lang/rust/issues/81432</a></pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are on the CC list for the bug.</li>
</ul>
</body>
</html>