Удаление неиспользуемых операций

Информация, содержащаяся в каждой операции, а именно данные о пользователях операции, может быть использована для удаления неиспользуемого кода. Реализация такой трансформации выглядит следующим образом:

void run(const Operation::Ptr &op, OptBuilder &builder) const override {
    bool unused = true;
    for (const auto &result : op->results)
        unused &= result->uses.empty();
    if (unused)
        builder.erase(op);
}

Здесь происходит вычисление логического выражения, операндами которого является условие «используется ли результат операции?» для каждого результата, порождаемого текущей операцией. На выходе получаем дерево, в котором для каждой операции найдется пользователь ее результата.

Назад