brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 5bdbca6 Raw
62 lines · cpp
1//===-- ComponentPath.cpp -------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "flang/Lower/ComponentPath.h"10 11static std::function<12    Fortran::lower::IterationSpace(const Fortran::lower::IterationSpace &)>13getIdentityFunc() {14  return [](const Fortran::lower::IterationSpace &s) { return s; };15}16 17static std::function<18    Fortran::lower::IterationSpace(const Fortran::lower::IterationSpace &)>19getNullaryFunc() {20  return [](const Fortran::lower::IterationSpace &s) {21    Fortran::lower::IterationSpace newIters(s);22    newIters.clearIndices();23    return newIters;24  };25}26 27void Fortran::lower::ComponentPath::clear() {28  reversePath.clear();29  substring = nullptr;30  applied = false;31  prefixComponents.clear();32  trips.clear();33  suffixComponents.clear();34  pc = getIdentityFunc();35}36 37bool Fortran::lower::isRankedArrayAccess(const Fortran::evaluate::ArrayRef &x) {38  for (const Fortran::evaluate::Subscript &sub : x.subscript()) {39    if (Fortran::common::visit(40            Fortran::common::visitors{41                [&](const Fortran::evaluate::Triplet &) { return true; },42                [&](const Fortran::evaluate::IndirectSubscriptIntegerExpr &e) {43                  return e.value().Rank() > 0;44                }},45            sub.u))46      return true;47  }48  return false;49}50 51void Fortran::lower::ComponentPath::resetPC() { pc = getIdentityFunc(); }52 53void Fortran::lower::ComponentPath::setPC(bool isImplicit) {54  pc = isImplicit ? getIdentityFunc() : getNullaryFunc();55  resetExtendCoorRef();56}57 58Fortran::lower::ComponentPath::ExtendRefFunc59Fortran::lower::ComponentPath::getExtendCoorRef() const {60  return hasExtendCoorRef() ? *extendCoorRef : [](mlir::Value v) { return v; };61}62