Giter Club home page Giter Club logo

Comments (3)

regehr avatar regehr commented on September 1, 2024

hi Nick, cost models have been a major problem for Souper since day 1.

here's the current cost function from Inst.cpp:

int Inst::getCost(Inst::Kind K) {
  switch (K) {
    case Var:
    case Const:
    case UntypedConst:
    case SAddO:
    case UAddO:
    case SSubO:
    case USubO:
    case SMulO:
    case UMulO:
      return 0;
    case BitReverse:
    case BSwap:
    case CtPop:
    case Cttz:
    case Ctlz:
    case SDiv:
    case UDiv:
    case SRem:
    case URem:
      return 5;
    case FShl:
    case FShr:
    case SAddSat:
    case UAddSat:
    case SSubSat:
    case USubSat:
    case Select:
      return 3;
    default:
      return 1;
  }
}

there are three things we can do. first, we can tweak this, for example by giving mul cost 2, which should cause the result you want to be produced. second, you can hack your local souper (and I suggest you try that now, and see if it does what I said). third, we could make it possible to provide souper with a cost model externally. I've tweaked this stupid cost model many times and there's no good answer even within LLVM, and of course you're sort of misusing souper for non-LLVM purposes, so...

from souper.

regehr avatar regehr commented on September 1, 2024

to give a bit more history, I've asked a number of smart and experienced LLVM people what we should do for a cost model over the years. everyone has one or more ideas, and none of them have ended up being satisfactory. so probably for now just do whatever you want in this function.

of course a better cost model would (optionally) look at multiple instructions instead of just one. but that way leads to madness.

from souper.

fitzgen avatar fitzgen commented on September 1, 2024

Thanks for the reply. Yeah, this definitely is a rabbit hole one could keep following.

Hacked up that method and I'm getting what I expect now. Thanks!

from souper.

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.