llvm::matchSimpleBinaryIntrinsicRecurrence

Match a simple binary-intrinsic value-accumulating recurrence.

Synopsis

Declared in <llvm/Analysis/ValueTracking.h>

bool
matchSimpleBinaryIntrinsicRecurrence(
    IntrinsicInst const* I,
    PHINode*& P,
    Value*& Init,
    Value*& OtherOp);

Description

Attempt to match a simple value-accumulating recurrence of the form: %llvm.intrinsic.acc = phi Ty [%Init, %Entry], [%llvm.intrinsic, %backedge] %llvm.intrinsic = call Ty llvm.intrinsic(%OtherOp, %llvm.intrinsic.acc) OR %llvm.intrinsic.acc = phi Ty [%Init, %Entry], [%llvm.intrinsic, %backedge] %llvm.intrinsic = call Ty llvm.intrinsic(%llvm.intrinsic.acc, %OtherOp)

The recurrence relation is of kind: X_0 = %a (initial value), X_i = call llvm.binary.intrinsic(X_i-1, %b) Where %b is not required to be loop-invariant.

Return Value

True if a simple binary intrinsic recurrence was matched.

Parameters

NameDescription
IIntrinsic call that may be the recurrence update.
POutput phi accumulator of the matched recurrence.
InitOutput initial value of the accumulator.
OtherOpOutput non-accumulator operand of the intrinsic.