forked from OSchip/llvm-project
[InstSimplify] Add "X / 1.0" to SimplifyFDivInst.
Differential Revision: https://reviews.llvm.org/D27587 llvm-svn: 289153
This commit is contained in:
parent
95c7d8d2a7
commit
394cef803a
|
@ -1127,6 +1127,10 @@ static Value *SimplifyFDivInst(Value *Op0, Value *Op1, FastMathFlags FMF,
|
||||||
if (match(Op1, m_Undef()))
|
if (match(Op1, m_Undef()))
|
||||||
return Op1;
|
return Op1;
|
||||||
|
|
||||||
|
// X / 1.0 -> X
|
||||||
|
if (match(Op1, m_FPOne()))
|
||||||
|
return Op0;
|
||||||
|
|
||||||
// 0 / X -> 0
|
// 0 / X -> 0
|
||||||
// Requires that NaNs are off (X could be zero) and signed zeroes are
|
// Requires that NaNs are off (X could be zero) and signed zeroes are
|
||||||
// ignored (X could be positive or negative, so the output sign is unknown).
|
// ignored (X could be positive or negative, so the output sign is unknown).
|
||||||
|
@ -4093,6 +4097,8 @@ static Value *SimplifyFPBinOp(unsigned Opcode, Value *LHS, Value *RHS,
|
||||||
return SimplifyFSubInst(LHS, RHS, FMF, Q, MaxRecurse);
|
return SimplifyFSubInst(LHS, RHS, FMF, Q, MaxRecurse);
|
||||||
case Instruction::FMul:
|
case Instruction::FMul:
|
||||||
return SimplifyFMulInst(LHS, RHS, FMF, Q, MaxRecurse);
|
return SimplifyFMulInst(LHS, RHS, FMF, Q, MaxRecurse);
|
||||||
|
case Instruction::FDiv:
|
||||||
|
return SimplifyFDivInst(LHS, RHS, FMF, Q, MaxRecurse);
|
||||||
default:
|
default:
|
||||||
return SimplifyBinOp(Opcode, LHS, RHS, Q, MaxRecurse);
|
return SimplifyBinOp(Opcode, LHS, RHS, Q, MaxRecurse);
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,12 +62,10 @@ define double @fmul_X_1(double %a) {
|
||||||
ret double %b
|
ret double %b
|
||||||
}
|
}
|
||||||
|
|
||||||
; FIXME:
|
|
||||||
; fdiv X, 1.0 ==> X
|
; fdiv X, 1.0 ==> X
|
||||||
define float @fdiv_x_1(float %a) {
|
define float @fdiv_x_1(float %a) {
|
||||||
; CHECK-LABEL: @fdiv_x_1(
|
; CHECK-LABEL: @fdiv_x_1(
|
||||||
; CHECK-NEXT: [[RET:%.*]] = fdiv float %a, 1.000000e+00
|
; CHECK-NEXT: ret float %a
|
||||||
; CHECK-NEXT: ret float [[RET]]
|
|
||||||
;
|
;
|
||||||
%ret = fdiv float %a, 1.0
|
%ret = fdiv float %a, 1.0
|
||||||
ret float %ret
|
ret float %ret
|
||||||
|
|
Loading…
Reference in New Issue