[llvm-dev] Status of the function merging pass? (original) (raw)

Davide Italiano via llvm-dev llvm-dev at lists.llvm.org
Thu Jan 31 13:43:47 PST 2019


On Thu, Jan 31, 2019 at 12:24 PM Shoaib Meenai via llvm-dev <llvm-dev at lists.llvm.org> wrote:

(Disclaimer: I don’t know anything about MergeFunctions; I’m just assuming functionality from the name)

How does MergeFunctions compare to performing identical code folding (ICF) in the linker?

The linker has access to a narrower set of informations, so it can only merge byte-by-byte identical functions, while, in theory, you can imagine that mergefunc could discover equivalences (through VN), and understand that, e.g.

func pat(i32 %blah) {
  %0 = sub %blah, 1
   ret %0
}

and

func tinky(i32 %blah) {
  %0 = add %blah, 0
  ret %0
}

are equivalent. Some things to keep in mind:

  1. My example is relatively silly, but some slightly more elaborate patterns might show up in real code
  2. I think llvm does enough canonicalization that we should be able to catch these anyways
  3. I don't think the pass as-is in tree does any equivalence finding, but that's a potential advantage of running this analysis as IR pass.

Thanks,

-- Davide



More information about the llvm-dev mailing list