[all-commits] [llvm/llvm-project] 1bb52e: [CIR] Build out AST consumer patterns to reach the...

Nathan Lanza via All-commits all-commits at lists.llvm.org
Wed Oct 9 11:21:11 PDT 2024


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 1bb52e94621d2cba4f34504697cb0ea83805cb98
      https://github.com/llvm/llvm-project/commit/1bb52e94621d2cba4f34504697cb0ea83805cb98
  Author: Nathan Lanza <nathanlanza at gmail.com>
  Date:   2024-10-09 (Wed, 09 Oct 2024)

  Changed paths:
    A clang/include/clang/CIR/CIRGenerator.h
    A clang/include/clang/CIR/FrontendAction/CIRGenAction.h
    M clang/include/clang/Driver/Options.td
    M clang/lib/CIR/CMakeLists.txt
    A clang/lib/CIR/CodeGen/CIRGenModule.cpp
    A clang/lib/CIR/CodeGen/CIRGenModule.h
    A clang/lib/CIR/CodeGen/CIRGenTypeCache.h
    A clang/lib/CIR/CodeGen/CIRGenerator.cpp
    A clang/lib/CIR/CodeGen/CMakeLists.txt
    A clang/lib/CIR/FrontendAction/CIRGenAction.cpp
    A clang/lib/CIR/FrontendAction/CMakeLists.txt
    M clang/lib/Driver/ToolChains/Clang.cpp
    M clang/lib/FrontendTool/CMakeLists.txt
    M clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp
    A clang/test/CIR/hello.c
    A clang/test/CIR/lit.local.cfg

  Log Message:
  -----------
  [CIR] Build out AST consumer patterns to reach the entry point into CIRGen

Build out the necessary infrastructure for the main entry point into
ClangIR generation -- CIRGenModule. A set of boilerplate classes exist
to facilitate this -- CIRGenerator, CIRGenAction, EmitCIRAction and
CIRGenConsumer. These all mirror the corresponding types from LLVM
generation by Clang's CodeGen.

The main entry point to CIR generation is
`CIRGenModule::buildTopLevelDecl`. It is currently just an empty
function. We've added a test to ensure that the pipeline reaches this
point and doesn't fail, but does nothing else. This will be removed in
one of the subsequent patches that'll add basic `cir.func` emission.

This patch also re-adds `-emit-cir` to the driver. lib/Driver/Driver.cpp
requires that a driver flag exists to facilirate the selection of the
right actions for the driver to create. Without a driver flag you get
the standard behaviors of `-S`, `-c`, etc. If we want to emit CIR IR
and, eventually, bytecode we'll need a driver flag to force this. This
is why `-emit-llvm` is a driver flag. Notably, `-emit-llvm-bc` as a cc1
flag doesn't ever do the right thing. Without a driver flag it is
incorrectly ignored and an executable is emitted. With `-S` a file named
`something.s` is emitted which actually contains bitcode.

Reviewers: AaronBallman, MaskRay, bcardosolopes

Reviewed By: bcardosolopes, AaronBallman

Pull Request: https://github.com/llvm/llvm-project/pull/91007



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list