From 63da0c238bfb90a1d04e94ab92fe122cff72dc0d Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Fri, 6 Jan 2017 22:58:02 +0000 Subject: [InstSimplify] Optimize away udivs in the presence of range metadata We know that udiv %V, C can be optimized away to 0 if %V is ult C. llvm-svn: 291296 --- llvm/lib/Analysis/InstructionSimplify.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'llvm/lib/Analysis') diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp index 7ae7c4ef939..8da2f0981d0 100644 --- a/llvm/lib/Analysis/InstructionSimplify.cpp +++ b/llvm/lib/Analysis/InstructionSimplify.cpp @@ -1106,6 +1106,16 @@ static Value *SimplifyUDivInst(Value *Op0, Value *Op1, const Query &Q, if (Value *V = SimplifyDiv(Instruction::UDiv, Op0, Op1, Q, MaxRecurse)) return V; + // udiv %V, C -> 0 if %V < C + if (MaxRecurse) { + if (Constant *C = dyn_cast_or_null(SimplifyICmpInst( + ICmpInst::ICMP_ULT, Op0, Op1, Q, MaxRecurse - 1))) { + if (C->isAllOnesValue()) { + return Constant::getNullValue(Op0->getType()); + } + } + } + return nullptr; } -- cgit v1.2.3