forked from OSchip/llvm-project
[ConstantFolding] Guard against unfolded FP binop
Check that the operation actually folded before trying to flush denormals. A minor variation of the pr33453 test exposed this with the FP binops marked as undesirable.
This commit is contained in:
parent
74a8fce6e8
commit
d686ea32b1
|
@ -1397,6 +1397,8 @@ Constant *llvm::ConstantFoldFPInstOperands(unsigned Opcode, Constant *LHS,
|
|||
|
||||
// Calculate constant result.
|
||||
Constant *C = ConstantFoldBinaryOpOperands(Opcode, Op0, Op1, DL);
|
||||
if (!C)
|
||||
return nullptr;
|
||||
|
||||
// Flush denormal output if needed.
|
||||
return FlushFPConstant(C, I, /* IsOutput */ true);
|
||||
|
|
|
@ -6,9 +6,11 @@
|
|||
|
||||
define float @patatino() {
|
||||
; CHECK-LABEL: @patatino(
|
||||
; CHECK-NEXT: ret float fmul (float uitofp (i1 icmp eq (i16* getelementptr inbounds (i16, i16* @g2, i64 1), i16* @g1) to float), float uitofp (i1 icmp eq (i16* getelementptr inbounds (i16, i16* @g2, i64 1), i16* @g1) to float))
|
||||
; CHECK-NEXT: [[FMUL:%.*]] = fmul float uitofp (i1 icmp eq (i16* getelementptr inbounds (i16, i16* @g2, i64 1), i16* @g1) to float), uitofp (i1 icmp eq (i16* getelementptr inbounds (i16, i16* @g2, i64 1), i16* @g1) to float)
|
||||
; CHECK-NEXT: ret float [[FMUL]]
|
||||
;
|
||||
%call = call float @fabsf(float fmul (float uitofp (i1 icmp eq (i16* getelementptr inbounds (i16, i16* @g2, i64 1), i16* @g1) to float), float uitofp (i1 icmp eq (i16* getelementptr inbounds (i16, i16* @g2, i64 1), i16* @g1) to float)))
|
||||
%fmul = fmul float uitofp (i1 icmp eq (i16* getelementptr inbounds (i16, i16* @g2, i64 1), i16* @g1) to float), uitofp (i1 icmp eq (i16* getelementptr inbounds (i16, i16* @g2, i64 1), i16* @g1) to float)
|
||||
%call = call float @fabsf(float %fmul)
|
||||
ret float %call
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue