Issue |
145363
|
Summary |
riscv64 and aarch64 backends propagating range metadata too aggressively
|
Labels |
new issue
|
Assignees |
|
Reporter |
regehr
|
let's take this function:
```llvm
define i32 @f(ptr %0) {
%2 = load i32, ptr %0, align 4, !range !0
%3 = load i32, ptr %0, align 4
%4 = add i32 1206154280, %3
ret i32 %4
}
!0 = !{i32 1, i32 2, i32 3, i32 4}
```
both the risc64 and aarch64 backends lower it to something that does an `or` instead of an `add`:
```
f:
lw a0, 0(a0)
lui a1, 294471
addi a1, a1, 1064
or a0, a0, a1
ret
```
this would work fine if it was `%2` that was getting added, but it's `%3`. if the range invariant isn't respected by the data in memory `%2` harmlessly gets poison, but this doesn't allow us to infer anything about `%3`
cc @nunoplopes
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs