Issue 136536
Summary Missed Optimization: Store of Known Zero Not Folded in Conditional Path
Labels new issue
Assignees
Reporter GINN-Imp
    The following reduced IR is derived from https://eigen.tuxfamily.org/dox/Ref_8h_source.html.
More specifically, it comes from function ` EIGEN_DEVICE_FUNC bool construct(_expression_& expr)` (line 111).

Godbolt: https://godbolt.org/z/436xvYdsv
Missed optimization: `store i8 %2, ptr @v, align 1` --> `store i8 0, ptr @v, align 1`
alive2 proof: https://alive2.llvm.org/ce/z/kjuHWQ

```llvm
@_ZN5EigenL14no_more_assertE = internal global i8 0, align 1
@v = external global i8

define void @src(i1 %0) {
  %2 = zext i1 %0 to i8
  br i1 %0, label %common.ret, label %3

3:                                                ; preds = %1
  %.b2 = load i1, ptr @_ZN5EigenL14no_more_assertE, align 1
  br i1 %.b2, label %common.ret, label %4

4:                                                ; preds = %3
  store i1 true, ptr @_ZN5EigenL14no_more_assertE, align 1
 store i8 %2, ptr @v, align 1
  br label %common.ret

common.ret: ; preds = %1, %3, %4
  ret void
}

```

opt-trunk -O3 generates:
```llvm
define void @src(i1 %0) local_unnamed_addr #0 {
  %2 = zext i1 %0 to i8
  br i1 %0, label %common.ret, label %3

3:                                                ; preds = %1
  %.b2 = load i1, ptr @_ZN5EigenL14no_more_assertE, align 1
  br i1 %.b2, label %common.ret, label %4

4: ; preds = %3
  store i1 true, ptr @_ZN5EigenL14no_more_assertE, align 1
  store i8 %2, ptr @v, align 1
  br label %common.ret

common.ret:                                       ; preds = %4, %3, %1
  ret void
}

```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to