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()))
|
||||
return Op1;
|
||||
|
||||
// X / 1.0 -> X
|
||||
if (match(Op1, m_FPOne()))
|
||||
return Op0;
|
||||
|
||||
// 0 / X -> 0
|
||||
// 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).
|
||||
|
@ -4093,6 +4097,8 @@ static Value *SimplifyFPBinOp(unsigned Opcode, Value *LHS, Value *RHS,
|
|||
return SimplifyFSubInst(LHS, RHS, FMF, Q, MaxRecurse);
|
||||
case Instruction::FMul:
|
||||
return SimplifyFMulInst(LHS, RHS, FMF, Q, MaxRecurse);
|
||||
case Instruction::FDiv:
|
||||
return SimplifyFDivInst(LHS, RHS, FMF, Q, MaxRecurse);
|
||||
default:
|
||||
return SimplifyBinOp(Opcode, LHS, RHS, Q, MaxRecurse);
|
||||
}
|
||||
|
|
|
@ -62,12 +62,10 @@ define double @fmul_X_1(double %a) {
|
|||
ret double %b
|
||||
}
|
||||
|
||||
; FIXME:
|
||||
; fdiv X, 1.0 ==> X
|
||||
define float @fdiv_x_1(float %a) {
|
||||
; CHECK-LABEL: @fdiv_x_1(
|
||||
; CHECK-NEXT: [[RET:%.*]] = fdiv float %a, 1.000000e+00
|
||||
; CHECK-NEXT: ret float [[RET]]
|
||||
; CHECK-NEXT: ret float %a
|
||||
;
|
||||
%ret = fdiv float %a, 1.0
|
||||
ret float %ret
|
||||
|
|
Loading…
Reference in New Issue