Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[CIR][ABI] Apply CC lowering pass by default #842

Open
wants to merge 8 commits into
base: main
Choose a base branch
from

Conversation

sitio-couto
Copy link
Collaborator

Before this patch, the CC lowering pass was applied only when explicitly requested by the user. This update changes the default behavior to always apply the CC lowering pass, with an option to disable it using the -fno-clangir-call-conv-lowering flag if necessary.

The primary objective is to make this pass a mandatory step in the compilation pipeline. This ensures that future contributions correctly implement the CC lowering for both existing and new targets, resulting in more consistent and accurate code generation.

From an implementation perspective, several llvm_unreachable statements have been substituted with a new assert_or_abort macro. This macro can be configured to either trigger a non-blocking assertion or a blocking unreachable statement. This facilitates a test-by-testa incremental development as it does not required you to know which code path a test will trigger an just cause a crash if it does.

A few notable changes:

  • Support multi-block function in CC lowering
  • Ignore pointer-related CC lowering
  • Ignore no-proto functions CC lowering
  • Handle missing type evaluation kinds
  • Fix CC lowering for function declarations
  • Unblock indirect function calls
  • Disable CC lowering pass on several tests

Before this patch, the CC lowering pass was applied only when explicitly
requested by the user. This update changes the default behavior to
always apply the CC lowering pass, with an option to disable it using
the `-fno-clangir-call-conv-lowering` flag if necessary.

The primary objective is to make this pass a mandatory step in the
compilation pipeline. This ensures that future contributions correctly
implement the CC lowering for both existing and new targets, resulting
in more consistent and accurate code generation.

From an implementation perspective, several `llvm_unreachable`
statements have been substituted with a new `assert_or_abort` macro.
This macro can be configured to either trigger a non-blocking assertion
or a blocking unreachable statement. This facilitates a test-by-testa
incremental development as it does not required you to know which
code path a test will trigger an just cause a crash if it does.

A few notable changes:

 - Support multi-block function in CC lowering
 - Ignore pointer-related CC lowering
 - Ignore no-proto functions CC lowering
 - Handle missing type evaluation kinds
 - Fix CC lowering for function declarations
 - Unblock indirect function calls
 - Disable CC lowering pass on several tests
Copy link
Member

@bcardosolopes bcardosolopes left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks a bunch for working on this. Mostly nits in this round but approach LGTM (will merge once fixed)

clang/include/clang/CIR/MissingFeatures.h Outdated Show resolved Hide resolved
clang/include/clang/CIR/MissingFeatures.h Outdated Show resolved Hide resolved
clang/include/clang/Driver/Options.td Show resolved Hide resolved
@bcardosolopes
Copy link
Member

There are formatting changes needed, but for tests seems like you are hitting #829, so feel free to ignore that one.

@bcardosolopes
Copy link
Member

Conflicts + some tests failing still (probably because of recent merges).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants