forked from OSchip/llvm-project
[SLP] improve code comments; NFC
This likely started out only supporint binops, but now we handle min/max using cmp+sel, and we may extend to handle bool logic in the form of select.
This commit is contained in:
parent
23dd750279
commit
486992f958
|
@ -7517,7 +7517,7 @@ class HorizontalReduction {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Checks if the instruction is in basic block \p BB.
|
/// Checks if the instruction is in basic block \p BB.
|
||||||
/// For a min/max reduction check that both compare and select are in \p BB.
|
/// For a cmp+sel min/max reduction check that both ops are in \p BB.
|
||||||
static bool hasSameParent(Instruction *I, BasicBlock *BB) {
|
static bool hasSameParent(Instruction *I, BasicBlock *BB) {
|
||||||
if (isCmpSelMinMax(I)) {
|
if (isCmpSelMinMax(I)) {
|
||||||
auto *Sel = cast<SelectInst>(I);
|
auto *Sel = cast<SelectInst>(I);
|
||||||
|
@ -7624,8 +7624,8 @@ public:
|
||||||
// potential candidate for the reduction.
|
// potential candidate for the reduction.
|
||||||
unsigned LeafOpcode = 0;
|
unsigned LeafOpcode = 0;
|
||||||
|
|
||||||
// Post order traverse the reduction tree starting at B. We only handle true
|
// Post-order traverse the reduction tree starting at Inst. We only handle
|
||||||
// trees containing only binary operators.
|
// true trees containing binary operators or selects.
|
||||||
SmallVector<std::pair<Instruction *, unsigned>, 32> Stack;
|
SmallVector<std::pair<Instruction *, unsigned>, 32> Stack;
|
||||||
Stack.push_back(std::make_pair(Inst, getFirstOperandIndex(Inst)));
|
Stack.push_back(std::make_pair(Inst, getFirstOperandIndex(Inst)));
|
||||||
initReductionOps(Inst);
|
initReductionOps(Inst);
|
||||||
|
@ -7661,7 +7661,7 @@ public:
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Visit left or right.
|
// Visit operands.
|
||||||
Value *EdgeVal = TreeN->getOperand(EdgeToVisit);
|
Value *EdgeVal = TreeN->getOperand(EdgeToVisit);
|
||||||
auto *EdgeInst = dyn_cast<Instruction>(EdgeVal);
|
auto *EdgeInst = dyn_cast<Instruction>(EdgeVal);
|
||||||
if (!EdgeInst) {
|
if (!EdgeInst) {
|
||||||
|
|
Loading…
Reference in New Issue