| Issue |
170071
|
| Summary |
Missed Optimization: Unnecessary `icmp` for checking overflow of `add nsw` in `_M_check_len`
|
| Labels |
new issue
|
| Assignees |
|
| Reporter |
xuhongxu96
|
```llvm
define i64 @src(i64 %v0) {
%v1 = tail call i64 @llvm.umax.i64(i64 %v0, i64 1)
%v2 = add nsw i64 %v1, %v0
%v3 = icmp ult i64 %v2, %v0
%v4 = tail call i64 @llvm.umin.i64(i64 %v2, i64 288230376151711743)
%v5 = select i1 %v3, i64 288230376151711743, i64 %v4
ret i64 %v5
}
define i64 @tgt(i64 %v0) {
%v1 = tail call i64 @llvm.umax.i64(i64 %v0, i64 1)
%v2 = add nsw i64 %v1, %v0
%v4 = tail call i64 @llvm.umin.i64(i64 %v2, i64 288230376151711743)
ret i64 %v4
}
; 288230376151711743 == std::allocator_traits<std::allocator<std::string>>::max_size(...);
```
Alive2: https://alive2.llvm.org/ce/z/QTCWkK
Godbolt: https://godbolt.org/z/dM747MT69
This pattern is compiled from `_M_realloc_insert` (`_M_check_len`), which exists in many sources.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs