ExecutionEngine Orc/JITLink Layering issues

I noticed that there appear to be some layering issues in the ExecutionEngine libraries. The includes between the Orc and JITLink components have a lot of cycles. From reading https://groups.google.com/g/llvm-dev/c/uOKEZ-1THf4/m/aHiR5gTOAwAJ it seems like the goal is for shared components to be in Orc/Shared. Perhaps more things could move in there

I made some dot graphs using cinclude2dot. https://gist.github.com/GMNGeoffrey/2c9818d418a70517f8c628432e1c2447 has them at the directory level and also one where the include/ and lib/ directories are merged into a single node. I’ve also attached the rendered SVGs.

executionengine_include.svg

executionengine_merge_lib.svg

Ping on this now that folks are likely back from the holidays :slight_smile:

Hi Geoffrey,

Sorry for the delayed reply! Yep – some of this mess crept in while TargetProcess and Shared were being broken out. I start looking at a refactor to sort this out tomorrow, but it might take a little while to untangle.

Regards,
Lang.

Thanks! Not a huge rush. I didn’t really want to go mucking about in there myself since it seemed like you were actively working on reorganizing it :slight_smile:

Hi Geoffrey,

I think this should be fixed now. The dependency diagram looks like:

OrcJIT ±> JITLink ±> OrcTargetProcess ±> OrcShared
----------/ /
-----------------------------/

That is:

OrcShared has no dependencies.
OrcTargetProcess depends on OrcShared, but nothing else.
JITLink depends on OrcTargetProcess and OrcShared.
Orc depends on the previous three.

There are some dependencies between Orc and ExecutionSession. I expect they will be removed in the LLVM 13 timeframe though.

Regards,
Lang.

Awesome, thanks! Looks to me like it’s fixed too