GithubHelp home page GithubHelp logo

Comments (11)

Mogball avatar Mogball commented on July 27, 2024

I recently changed scf.while to be simplifiable by SCCP, after fixing a few bugs with getRegionSuccessors and how that function was getting used. The same can be done for mhlo.while.

from mlir-hlo.

lipracer avatar lipracer commented on July 27, 2024

Thanks a lot, I will make a reference and then implement the simplification of mhlo::while.

from mlir-hlo.

joker-eph avatar joker-eph commented on July 27, 2024

Isn't a folder for the WhileOp when the return of the condition is false enough here?

from mlir-hlo.

lipracer avatar lipracer commented on July 27, 2024

Yeah.First we need to propagate the constant to cond's body, then try to fold it's.

while(%cst0, %cst1) {
  cond (%arg0, %arg1) {
    return compare(%arg0, %arg1)  
  }
}

and the mhlo-sink-constants-to-control-flow just clone constantOp into body, didn't clone arguments.

from mlir-hlo.

joker-eph avatar joker-eph commented on July 27, 2024

I have a patch for the folder, but I also looked into the RegionBranchOpInterface and it seems like there is a limitation to the interface that prevents us from using it in MHLO.

In particular the getMutableSuccessorOperands for RegionBranchTerminatorOpInterface can't be used with our while op because the condition terminator does not take as operands the values to pass to the body...

from mlir-hlo.

lipracer avatar lipracer commented on July 27, 2024

Can we apply the framework of data flow analysis, implemented by constant propagation? Including other control flow simplifications, I'm not sure if scf dailect does these mhlo's as well, but we need these for completeness.

from mlir-hlo.

joker-eph avatar joker-eph commented on July 27, 2024

This relies on RegionBranchOpInterface, which is difficult to apply here (what I'm describing above)

from mlir-hlo.

Mogball avatar Mogball commented on July 27, 2024

In particular the getMutableSuccessorOperands for RegionBranchTerminatorOpInterface can't be used with our while op because the condition terminator does not take as operands the values to pass to the body...

I've run into this limitation before but just added as operands the forwarded values. I will check whether the function really needs to return a MutableOperandRange or whether it can just return a ValueRange. Then, the terminator could just return the block arguments.

from mlir-hlo.

joker-eph avatar joker-eph commented on July 27, 2024

Thanks!

from mlir-hlo.

lipracer avatar lipracer commented on July 27, 2024

Thanks.I need to know about RegionBranchOpInterface. But xla service already has while_loop_simplifier.

from mlir-hlo.

Mogball avatar Mogball commented on July 27, 2024

I will check whether the function really needs to return a MutableOperandRange or whether it can just return a ValueRange

The only upstream use of the MutableOperandRange return type is in buffer deallocation.

This signature matches with the interface for BranchOpInterface in that it allows transformations to reason and modify control-flow constructs. I'm not sure it can go away.

from mlir-hlo.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.