Where is the code that is called when clang calls the job which generates IR?

Where is the source code that is called when the clang binary executable calls the command/job which compiles C code to IR?

I am using Clang as a library (basically a simplified version of the main function in /tools/clang/tools/driver/driver.cpp).

My program creates an instance of clang::driver::Driver. I pass arguments to TheDriver.BuildCompilation(args)). And then call ExecuteCompilation. Everything works.

When I call TheDriver.PrintActions(*C) the output is

0: input, “testcode.cpp”, c++
1: preprocessor, {0}, c+±cpp-output
2: compiler, {1}, ir
3: backend, {2}, assembler
4: assembler, {3}, object
5: linker, {4}, image

And when I loop over the jobs inside the Compilation object I see that the clang binary executable is called 4 times (using execve) and finally ld.lld is called.

I’m interested in the call to clang for “2: compiler, {1}, ir”.

Is /tools/clang/tools/driver/driver.cpp called again? It seems that the main function in driver.cpp eventually calls itself again. If not what is called, and where is the source code?

(Remembering to add llvm-dev this time…)

If you look at the argc/argv for the “2: compiler” case, the first option should be “-cc1” which will cause the driver to dispatch to cc1_main(), which is in cc1_main.cpp.


Look for code in clang/lib/CodeGen/

Easy starting point could be

void CodeGenFunction::EmitFunctionBody;