I’m trying to familiarize myself with LLVM’s dependency analysis infrastructure to write a new pass. I see that
opt has a
--da flag for seemingly generic dependency analysis of memory operations, but there’s also the memory SSA pass which, according to the documentation page, seems to aim to be the go to for memory reference dependency analysis. The two passes give different outputs with
opt as well, and I’m curious what each of their roles are meant to be and what one does that the other doesn’t.
Also, which pass does the auto-vectoriser use to determine if vectorisation is valid? Or is it a combination?