Lines Matching defs:tree

74   void emitStaticMatcher(DagNode tree, std::string funcName);
78 void emitMatchLogic(DagNode tree, StringRef opName);
88 void emitMatch(DagNode tree, StringRef name, int depth);
91 void emitStaticMatchCall(DagNode tree, StringRef name);
98 void emitNativeCodeMatch(DagNode tree, StringRef name, int depth);
101 // `tree` returning the op's variable name.
102 void emitOpMatch(DagNode tree, StringRef opName, int depth);
105 // DAG `tree` as an operand. `operandName` and `operandMatcher` indicate the
107 void emitOperandMatch(DagNode tree, StringRef opName, StringRef operandName,
114 void emitEitherOperandMatch(DagNode tree, DagNode eitherArgTree,
119 void emitVariadicOperandMatch(DagNode tree, DagNode variadicArgTree,
124 // DAG `tree` as an attribute.
125 void emitAttributeMatch(DagNode tree, StringRef opName, int argIndex,
160 StringRef handleReplaceWithValue(DagNode tree);
164 std::string handleVariadic(DagNode tree, int depth);
180 TrailingDirectives getTrailingDirectives(DagNode tree);
186 std::string handleLocationDirective(DagNode tree);
191 // Emits the C++ statement to build a new op out of the given DAG `tree` and
193 // DAG `tree` has a specified name, the created op will be assigned to a
196 std::string handleOpCreation(DagNode tree, int resultIndex, int depth);
227 // Collects all of the operations within the given dag tree.
228 void collectOps(DagNode tree, llvm::SmallPtrSetImpl<const Operator *> &ops);
367 void PatternEmitter::emitStaticMatcher(DagNode tree, std::string funcName) {
375 // need to collect all the symbols in the tree first.
376 pattern.collectBoundSymbols(tree, symbolInfoMap, /*isSrcPattern=*/true);
387 emitMatch(tree, "op0", /*depth=*/1);
395 void PatternEmitter::emitMatch(DagNode tree, StringRef name, int depth) {
396 if (tree.isNativeCodeCall()) {
397 emitNativeCodeMatch(tree, name, depth);
401 if (tree.isOperation()) {
402 emitOpMatch(tree, name, depth);
409 void PatternEmitter::emitStaticMatchCall(DagNode tree, StringRef opName) {
410 std::string funcName = staticMatcherHelper.getMatcherName(tree);
426 pattern.collectBoundSymbols(tree, localSymbolMap, /*isSrcPattern=*/true);
450 void PatternEmitter::emitNativeCodeMatch(DagNode tree, StringRef opName,
453 LLVM_DEBUG(tree.print(llvm::dbgs()));
458 // generated if needed. The reason we check if `getMatcherName(tree).empty()`
461 if (staticMatcherHelper.useStaticMatcher(tree) &&
462 !staticMatcherHelper.getMatcherName(tree).empty()) {
463 emitStaticMatchCall(tree, opName);
477 for (int i = 0, e = tree.getNumArgs(); i != e; ++i) {
479 if (DagNode argTree = tree.getArgAsNestedDag(i)) {
487 auto leaf = tree.getArgAsLeaf(i);
498 auto tail = getTrailingDirectives(tree);
503 auto fmt = tree.getNativeCodeTemplate();
515 for (int i = 0, e = tree.getNumArgs() - tail.numDirectives; i != e; ++i) {
516 auto name = tree.getArgName(i);
522 for (int i = 0, e = tree.getNumArgs() - tail.numDirectives; i != e; ++i) {
526 if (tree.getArgAsNestedDag(i)) {
528 loc, formatv("Matching nested tree in NativeCodecall not support for "
533 DagLeaf leaf = tree.getArgAsLeaf(i);
552 i, tree.getNativeCodeTemplate(),
561 void PatternEmitter::emitOpMatch(DagNode tree, StringRef opName, int depth) {
562 Operator &op = tree.getDialectOp(opMap);
573 // generated if needed. The reason we check if `getMatcherName(tree).empty()`
576 if (staticMatcherHelper.useStaticMatcher(tree) &&
577 !staticMatcherHelper.getMatcherName(tree).empty()) {
578 emitStaticMatchCall(tree, opName);
600 auto name = tree.getSymbol();
604 for (int i = 0, opArgIdx = 0, e = tree.getNumArgs(), nextOperand = 0; i != e;
610 if (DagNode argTree = tree.getArgAsNestedDag(i)) {
612 emitEitherOperandMatch(tree, argTree, castedName, opArgIdx, nextOperand,
625 emitVariadicOperandMatch(tree, argTree, castedName, opArgIdx,
661 emitOperandMatch(tree, castedName, operandName.str(), opArgIdx,
662 /*operandMatcher=*/tree.getArgAsLeaf(i),
663 /*argName=*/tree.getArgName(i), opArgIdx,
667 emitAttributeMatch(tree, opName, opArgIdx, depth);
677 void PatternEmitter::emitOperandMatch(DagNode tree, StringRef opName,
682 Operator &op = tree.getDialectOp(opMap);
718 auto res = symbolInfoMap.findBoundSymbol(argName, tree, op, operandIndex,
727 void PatternEmitter::emitEitherOperandMatch(DagNode tree, DagNode eitherArgTree,
734 Operator &op = tree.getDialectOp(opMap);
774 emitOperandMatch(tree, opName, /*operandName=*/formatv("v{0}", i).str(),
806 void PatternEmitter::emitVariadicOperandMatch(DagNode tree,
810 Operator &op = tree.getDialectOp(opMap);
824 symbolInfoMap.findBoundSymbol(variadicTreeName, tree, op, operandIndex,
856 emitOperandMatch(tree, opName, operandName.str(), operandIndex,
867 void PatternEmitter::emitAttributeMatch(DagNode tree, StringRef opName,
869 Operator &op = tree.getDialectOp(opMap);
897 auto matcher = tree.getArgAsLeaf(argIndex);
930 auto name = tree.getArgName(argIndex);
955 void PatternEmitter::emitMatchLogic(DagNode tree, StringRef opName) {
958 emitMatch(tree, opName, depth);
1030 void PatternEmitter::collectOps(DagNode tree,
1032 // Check if this tree is an operation.
1033 if (tree.isOperation()) {
1034 const Operator &op = tree.getDialectOp(opMap);
1040 // Recurse the arguments of the tree.
1041 for (unsigned i = 0, e = tree.getNumArgs(); i != e; ++i)
1042 if (auto child = tree.getArgAsNestedDag(i))
1047 // Get the DAG tree for the source pattern.
1261 std::string PatternEmitter::handleVariadic(DagNode tree, int depth) {
1262 assert(tree.isVariadic());
1269 for (int i = 0, e = tree.getNumArgs(); i != e; ++i) {
1270 if (auto child = tree.getArgAsNestedDag(i)) {
1275 << handleOpArgument(tree.getArgAsLeaf(i), tree.getArgName(i))
1284 StringRef PatternEmitter::handleReplaceWithValue(DagNode tree) {
1285 assert(tree.isReplaceWithValue());
1287 if (tree.getNumArgs() != 1) {
1292 if (!tree.getSymbol().empty()) {
1296 return tree.getArgName(0);
1299 std::string PatternEmitter::handleLocationDirective(DagNode tree) {
1300 assert(tree.isLocationDirective());
1301 auto lookUpArgLoc = [this, &tree](int idx) {
1303 return symbolInfoMap.getValueAndRangeUse(tree.getArgName(idx), lookupFmt);
1306 if (tree.getNumArgs() == 0)
1310 if (!tree.getSymbol().empty())
1313 if (tree.getNumArgs() == 1) {
1314 DagLeaf leaf = tree.getArgAsLeaf(0);
1327 for (int i = 0, e = tree.getNumArgs(); i != e; ++i) {
1328 DagLeaf leaf = tree.getArgAsLeaf(i);
1398 std::string PatternEmitter::handleReplaceWithNativeCodeCall(DagNode tree,
1401 LLVM_DEBUG(tree.print(llvm::dbgs()));
1404 auto fmt = tree.getNativeCodeTemplate();
1408 auto tail = getTrailingDirectives(tree);
1413 for (int i = 0, e = tree.getNumArgs() - tail.numDirectives; i != e; ++i) {
1414 if (tree.isNestedDagArg(i)) {
1416 handleResultPattern(tree.getArgAsNestedDag(i), i, depth + 1));
1419 handleOpArgument(tree.getArgAsLeaf(i), tree.getArgName(i)));
1443 if (tree.getNumReturnsOfNativeCode() != 0) {
1446 SymbolInfoMap::getValuePackName(tree.getSymbol()).str();
1450 symbolInfoMap.bindValues(varName, tree.getNumReturnsOfNativeCode());
1456 if (!tree.getSymbol().empty())
1457 symbol = tree.getSymbol().str();
1484 PatternEmitter::getTrailingDirectives(DagNode tree) {
1488 auto numPatArgs = tree.getNumArgs();
1490 auto dagArg = tree.getArgAsNestedDag(i);
1528 std::string PatternEmitter::handleOpCreation(DagNode tree, int resultIndex,
1531 LLVM_DEBUG(tree.print(llvm::dbgs()));
1534 Operator &resultOp = tree.getDialectOp(opMap);
1536 auto numPatArgs = tree.getNumArgs();
1538 auto tail = getTrailingDirectives(tree);
1563 auto child = tree.getArgAsNestedDag(i);
1581 for (int i = 0, e = tree.getNumArgs() - tail.numDirectives; i != e; ++i) {
1583 if (auto child = tree.getArgAsNestedDag(i))
1594 if (tree.getSymbol().empty()) {
1599 resultValue = std::string(tree.getSymbol());
1623 createAggregateLocalVarsForOpArgs(tree, childNodeNames, depth);
1643 createSeparateLocalVarsForOpArgs(tree, childNodeNames);
1647 supplyValuesForOpArgs(tree, childNodeNames, depth);
1662 createAggregateLocalVarsForOpArgs(tree, childNodeNames, depth);