Reputation: 1836
I wrote a few own passes for llvm, in order to use them with clang.
I integrated them in llvm (not dynamically loaded). They are even listed in the Optimizations available: section when I type:
opt --help-hidden
I want to run one of own my passes now automatically as the last one when I call clang:
clang ./hello.bc -o ./hello
or even with c-code:
clang ./hello.c -o ./hello
When I run my pass with opt manually, the modified ByteCode is generated and written to a new .bc file:
opt -my-pass < ./hello.bc > ./hello_optimized.bc
When I compile the modified .bc with clang, normal clang Optimizations are run again, which destroy the optimizations of my manual executed pass:
clang -O0 -m32 ./hello_optimized.bc -o ./hello_optimized
My Question is:
Upvotes: 16
Views: 8336
Reputation: 333
As of now, the legacy pass manager is dropped. I wrote here a full example with clang + new pass manager (works for me). working example
Upvotes: 1
Reputation: 547
You can run your own pass with clang directly with -Xclang.
clang++ -Xclang -load -Xclang ./libmypass.so input.cpp
Upvotes: 5
Reputation: 1055
The proper way to do this would be to make clang add your pass to the pass manager it builds. See clang/lib/CodeGen/BackendUtil.cpp:void EmitAssemblyHelper::CreatePasses()
for how it's handled for the sanitizers.
Upvotes: 3