HelloWorldPass ?

My team is packaging up our next release, and this new pass popped
up. It has its own library and everything (LLVMHelloWorld.lib),
but it appears to be mandatory when linking against LLVM in general.
I can see it's an example pass regarding the new pass manager, but
I can also see the equivalent example for the legacy pass manager
wasn't mandatory and we don't have it in our package.

It seems like kind of a trivial thing to worry about--it's clearly
harmless and doesn't take up a lot of space--but it's how the thing
is packaged differently than the old Hello pass that bothers me.

- I see it's listed in lib/Passes/Registry.def; the old one wasn't.

- I see its CMakeLists.txt uses add_llvm_component_library where the
old one uses add_llvm_library.

I can't say I understand these things but just being different
raises my eyebrow. Is there a good reason they're different?
And just for my own curiosity, what's the simplest way to avoid
needing it in our package?

Thanks,
--paulr

My team is packaging up our next release, and this new pass popped
up. It has its own library and everything (LLVMHelloWorld.lib),
but it appears to be mandatory when linking against LLVM in general.
I can see it's an example pass regarding the new pass manager, but
I can also see the equivalent example for the legacy pass manager
wasn't mandatory and we don't have it in our package.

It seems like kind of a trivial thing to worry about--it's clearly
harmless and doesn't take up a lot of space--but it's how the thing
is packaged differently than the old Hello pass that bothers me.

- I see it's listed in lib/Passes/Registry.def; the old one wasn't.

- I see its CMakeLists.txt uses add_llvm_component_library where the
old one uses add_llvm_library.

Arthur, was the use of add_llvm_component_library() here intentional?

-Tom

This was added in https://reviews.llvm.org/D86979. My goal was to show how to write an in-tree NPM pass. It didn’t really fit into any of the existing directories/libraries, so I created a similar one to the legacy HelloWorld example. Since it’s unconditionally added to PassRegistry.def, I followed the CMake from something like llvm/lib/Transforms/Scalar. TBH I’m not super familiar with the various CMake machinery, so any suggestions are welcome.

In hindsight, perhaps adding it to llvm/lib/Transforms/Scalar would be cleaner and would still properly show how to write an in-tree pass. I can go ahead and do that if you’d like.

(Fix email address)

Could it go into llvm/examples or does it need to be under llvm/lib/Transforms?

The issue isn’t which directory it’s in, it’s which CMake component it’s in. We would still have to create a new library if we put it under llvm/examples.

In hindsight, perhaps adding it to llvm/lib/Transforms/Scalar would be cleaner and would still properly show how to write an in-tree pass. I can go ahead and do that if you'd like.

Agreed.

Removed the extra library in https://reviews.llvm.org/D95907. Should it be cherry-picked into 12.x?

It would be nice to see this in 12.x, but not critical. That said, the patch looks straightforward enough to go in without a problem, so it’s up to the code owners/release manager.

–paulr