[InstSimplify] Add "X / 1.0" to SimplifyFDivInst.

Differential Revision: https://reviews.llvm.org/D27587

llvm-svn: 289153
This commit is contained in:
Zia Ansari 2016-12-08 23:27:40 +00:00
parent 95c7d8d2a7
commit 394cef803a
2 changed files with 7 additions and 3 deletions

View File

@ -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);
} }

View File

@ -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