ΒΆbool isCheckForZeroAndMulWithOverflow(
llvm::Value* Op0,
llvm::Value* Op1,
bool IsAnd,
llvm::Use*& Y)
bool isCheckForZeroAndMulWithOverflow(
llvm::Value* Op0,
llvm::Value* Op1,
bool IsAnd,
llvm::Use*& Y)
Description
Match one of the patterns up to the select/logic op: %Op0 = icmp ne i4 %X, 0 %Agg = call { i4, i1 } @llvm.[us]mul.with.overflow.i4(i4 %X, i4 %Y) %Op1 = extractvalue { i4, i1 } %Agg, 1 %ret = select i1 %Op0, i1 %Op1, i1 false / %ret = and i1 %Op0, %Op1 %Op0 = icmp eq i4 %X, 0 %Agg = call { i4, i1 } @llvm.[us]mul.with.overflow.i4(i4 %X, i4 %Y) %NotOp1 = extractvalue { i4, i1 } %Agg, 1 %Op1 = xor i1 %NotOp1, true %ret = select i1 %Op0, i1 true, i1 %Op1 / %ret = or i1 %Op0, %Op1 Callers are expected to align that with the operands of the select/logic. IsAnd is set to true if the Op0 and Op1 are used as the first pattern. If Op0 and Op1 match one of the patterns above, return true and fill Y's use.
Declared at: llvm/include/llvm/Analysis/OverflowInstAnalysis.h:38
Parameters
- llvm::Value* Op0
- llvm::Value* Op1
- bool IsAnd
- llvm::Use*& Y