Issue 76404
Summary Bad optimization - results change at -O1
Labels
Assignees
Reporter ericastor
    Demonstration: https://godbolt.org/z/4c35Tncq8

LLVM IR that seems to miscompile:
```
define void @__sample__main(ptr %input_ptrs, ptr %output_ptrs) {
entry:
  %0 = alloca i8, align 1
  %1 = load ptr, ptr %input_ptrs, align 8
  %x.i.i = load i8, ptr %1, align 1
  %2 = sdiv i8 %x.i.i, -1
  store i8 %2, ptr %0, align 1
  %3 = load ptr, ptr %output_ptrs, align 8
  %y.i.i = load i8, ptr %0, align 1
  %4 = sext i8 %y.i.i to i16
  %5 = and i16 %4, 511
  store i16 %5, ptr %3, align 2
  ret void
}
```

Incorrectly optimized IR:
```
define void @__sample__main(ptr nocapture readonly %input_ptrs, ptr nocapture readonly %output_ptrs) local_unnamed_addr #0 {
entry:
  %0 = load ptr, ptr %input_ptrs, align 8
  %x.i.i = load i8, ptr %0, align 1
  %1 = sub nsw i8 0, %x.i.i
  %2 = load ptr, ptr %output_ptrs, align 8
  %3 = sext i8 %1 to i16
  %4 = and i16 %3, 511
  store i16 %4, ptr %2, align 2
 ret void
}
```

Not quite clear on what the issue is, but the output definitely changes.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to