Changeset View
Changeset View
Standalone View
Standalone View
llvm/lib/Analysis/IVDescriptors.cpp
Show First 20 Lines • Show All 581 Lines • ▼ Show 20 Lines | case Instruction::FAdd: | ||||
return InstDesc(Kind == RK_FloatAdd, I, UAI); | return InstDesc(Kind == RK_FloatAdd, I, UAI); | ||||
case Instruction::Select: | case Instruction::Select: | ||||
if (Kind == RK_FloatAdd || Kind == RK_FloatMult) | if (Kind == RK_FloatAdd || Kind == RK_FloatMult) | ||||
return isConditionalRdxPattern(Kind, I); | return isConditionalRdxPattern(Kind, I); | ||||
LLVM_FALLTHROUGH; | LLVM_FALLTHROUGH; | ||||
case Instruction::FCmp: | case Instruction::FCmp: | ||||
case Instruction::ICmp: | case Instruction::ICmp: | ||||
if (Kind != RK_IntegerMinMax && | if (Kind != RK_IntegerMinMax && | ||||
(!HasFunNoNaNAttr || Kind != RK_FloatMinMax)) | (!(HasFunNoNaNAttr || I->getOpcode() == Instruction::Select || | ||||
I->hasNoNaNs()) || | |||||
Kind != RK_FloatMinMax)) | |||||
return InstDesc(false, I); | return InstDesc(false, I); | ||||
return isMinMaxSelectCmpPattern(I, Prev); | return isMinMaxSelectCmpPattern(I, Prev); | ||||
} | } | ||||
} | } | ||||
bool RecurrenceDescriptor::hasMultipleUsesOf( | bool RecurrenceDescriptor::hasMultipleUsesOf( | ||||
Instruction *I, SmallPtrSetImpl<Instruction *> &Insts, | Instruction *I, SmallPtrSetImpl<Instruction *> &Insts, | ||||
unsigned MaxNumUses) { | unsigned MaxNumUses) { | ||||
▲ Show 20 Lines • Show All 495 Lines • Show Last 20 Lines |