Open
Description
NewGVN drops fast math flags - see the reproducer with fdiv
below:
define void @repro(float %.i2240) {
.entry:
%0 = fdiv reassoc nnan nsz arcp contract afn float %.i2240, 0.000000e+00
br label %.cont.1
.cont.1: ; preds = %.entry
br i1 false, label %.cont.2, label %.else.2
.else.2: ; preds = %.cont.1
br label %.cont.2
.cont.2: ; preds = %.else.2, %.cont.1
%.sroa.12.1.2 = phi float [ %0, %.else.2 ], [ 0.000000e+00, %.cont.1 ]
%1 = fcmp olt float %.sroa.12.1.2, 0.000000e+00
br i1 %1, label %2, label %.preheader.3
2: ; preds = %.cont.2
br label %.preheader.3
.preheader.3: ; preds = %2, %.cont.2
ret void
}
opt -S -passes="newgvn"
define void @repro(float %.i2240) {
.entry:
%0 = fdiv float %.i2240, 0.000000e+00
br label %.cont.1
.cont.1: ; preds = %.entry
br i1 false, label %.cont.2, label %.else.2
.else.2: ; preds = %.cont.1
br label %.cont.2
.cont.2: ; preds = %.else.2, %.cont.1
%1 = fcmp olt float %0, 0.000000e+00
br i1 %1, label %2, label %.preheader.3
2: ; preds = %.cont.2
br label %.preheader.3
.preheader.3: ; preds = %2, %.cont.2
ret void
}