Open
Description
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
@_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:
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
}