Issue 178245
Summary [InstCombine] Miscompilation at O1
Labels miscompilation, llvm:instcombine, floating-point, generated by fuzzer
Assignees arsenm, dtcxzyw
Reporter dtcxzyw
    Reproducer: https://alive2.llvm.org/ce/z/BPpLg_
```
; bin/opt -passes="instcombine<no-verify-fixpoint>" test.ll -S
define i32 @src(i32 %i.0.i.i) {
entry:
  %conv102.i.i = sext i32 %i.0.i.i to i64
 %add.i128.i.i = add i64 %conv102.i.i, 1177359834
  %tobool104.i.i = icmp ne i64 %add.i128.i.i, 0
  %conv108.i.i = zext i1 %tobool104.i.i to i16
 %mul.i.i.i = mul i16 -5, %conv108.i.i
  %conv111.i.i = sext i16 %mul.i.i.i to i32
  %0 = bitcast i32 %conv111.i.i to float
  %1 = fcmp uno float %0, 0.000000e+00
  %2 = call float @llvm.copysign.f32(float 0.000000e+00, float %0)
  %3 = select i1 %1, float 0.000000e+00, float %2
  %4 = bitcast float %3 to i32
  ret i32 %4
}
```
Output:
```
define i32 @src(i32 %i.0.i.i) {
entry:
  %tobool104.i.i.not = icmp eq i32 %i.0.i.i, -1177359834
 %conv111.i.i = select i1 %tobool104.i.i.not, i32 0, i32 -1177359834
  %0 = bitcast i32 %conv111.i.i to float
  %1 = fcmp uno float %0, 0.000000e+00
 %2 = call float @llvm.copysign.f32(float 0.000000e+00, float %0)
  %3 = select i1 %1, float 0.000000e+00, float %2
  %4 = bitcast float %3 to i32
 ret i32 %4
}
```
```
Transformation doesn't verify!

ERROR: Value mismatch

Example:
i32 %i.0.i.i = #x00000000 (0)

Source:
i64 %conv102.i.i = #x0000000000000000 (0)
i64 %add.i128.i.i = #x00000000462d15da (1177359834)
i1 %tobool104.i.i = #x1 (1)
i16 %conv108.i.i = #x0001 (1)
i16 %mul.i.i.i = #xfffb (65531, -5)
i32 %conv111.i.i = #xfffffffb (4294967291, -5)
float %#0 = #xfffffffb (QNaN)
i1 %#1 = #x1 (1)
float %#2 = #x80000000 (-0.0)
float %#3 = #x00000000 (+0.0)
i32 %#4 = #x00000000 (0)

Target:
i1 %tobool104.i.i.not = #x0 (0)
i32 %conv111.i.i = #xb9d2ea26 (3117607462, -1177359834)
float %#0 = #xb9d2ea26 (-0.000402287754?)
i1 %#1 = #x0 (0)
float %#2 = #x80000000 (-0.0)
float %#3 = #x80000000 (-0.0)
i32 %#4 = #x80000000 (2147483648, -2147483648)
Source value: #x00000000 (0)
Target value: #x80000000 (2147483648, -2147483648)
```
llvm version: 94e21bcec061c1691cd0d5382e3c6f420e0386c4
Looks like it is triggered by https://github.com/llvm/llvm-project/pull/177942. cc @arsenm
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to