[libc-commits] [llvm] [libc] [NVPTX] Disable incorrect peephole optimizations (PR #79920)

Justin Fargnoli via libc-commits libc-commits at lists.llvm.org
Fri Feb 2 15:15:33 PST 2024


justinfargnoli wrote:

> It should've been (SETP_u32rr BFE(Int32Regs:$a), BFE(Int32Regs:$b), CmpLS) as in the test cases changed by the patch.

That makes sense! 

> Also, the example in the description seems to be invalid:
>> For example, when %a := Ox100 and %b := Ox1, setugt (i16 (and (trunc Int32Regs:$a), 255)), (i16 (and (trunc Int32Regs:$b), 255))) produces a false predicate. Whereas SETP_u32rr Int32Regs:$a, Int32Regs:$b, CmpHI will produce a true predicate.
> Translated into a more readable pseudo-code:
> ```
> a = 0x100
> b = 0x1
> pred =  ((uint16_t)(a) & 0xff) > ((uint16_t)(b) & 0xff);
> ```
> AFAICT, pred should be false here. It's not the matching part of the pattern that we need to fix, but rather the replacement.

It seems like we're on the same page. `pred` should be `false`. But, the replacement will change the code to behave like the below pseudo code. That pseudo code will set `pred` to `true`, producing an incorrect result. 

```
a = 0x100
b = 0x1
pred =  a > b;
```
---
Assuming there are no other review comments, can I submit this PR to get rid of the incorrect transformation?  


https://github.com/llvm/llvm-project/pull/79920


More information about the libc-commits mailing list