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

Add Homogenous Aggregates for AArch64 codegen #24181

Merged
merged 1 commit into from
Apr 16, 2015

Conversation

jgallagher
Copy link

I doubt this PR is ready to merge as-is, for a couple reasons:

  • There are no tests for this change. I'm not sure how to add tests for this change, as it modifies the C ABI for a cross-compilation target. Anecdotally, I have an iOS library I've been working on, and before this change, it crashes running on an arm64 device due to bad calling conventions (a simplified example is in aarch64-apple-ios: Returning structs by value in extern "C" functions uses wrong calling convention #24154), and after this change, it runs correctly.
  • This is my first foray into LLVM. I did my best to reimplement what Clang does for AArch64 codegen (https://github.com/llvm-mirror/clang/blob/master/lib/CodeGen/TargetInfo.cpp), particularly in ABIInfo::isHomogeneousAggregate, AArch64ABIInfo::isHomogeneousAggregateBaseType, and AArch64ABIInfo::isHomogeneousAggregateSmallEnough, but I'm not confident I got a complete translation, particularly because Clang includes a lot of checks that I don't believe are necessary for rustc.

Fixes #24154.

@rust-highfive
Copy link
Collaborator

r? @pnkfelix

(rust_highfive has picked a reviewer for you, use r? to override)

@sanxiyn
Copy link
Member

sanxiyn commented Apr 8, 2015

I propose we merge this as-is. 1. This is a localized change. 2. This apparently works. 3. We have no infrastructure to test ARM64 changes, yet.

@jgallagher
Copy link
Author

(I just squashed a commit to fix some typos in the comments - no code changes.)

@pnkfelix
Copy link
Member

I agree with @sanxiyn 's analysis; sorry for the delay in review.

@pnkfelix
Copy link
Member

@bors r+ 1a44b38

bors added a commit that referenced this pull request Apr 16, 2015
I doubt this PR is ready to merge as-is, for a couple reasons:

* There are no tests for this change. I'm not sure how to add tests for this change, as it modifies the C ABI for a cross-compilation target. Anecdotally, I have an iOS library I've been working on, and before this change, it crashes running on an arm64 device due to bad calling conventions (a simplified example is in #24154), and after this change, it runs correctly.
* This is my first foray into LLVM. I did my best to reimplement what Clang does for AArch64 codegen (https://github.com/llvm-mirror/clang/blob/master/lib/CodeGen/TargetInfo.cpp), particularly in `ABIInfo::isHomogeneousAggregate`, `AArch64ABIInfo::isHomogeneousAggregateBaseType`, and `AArch64ABIInfo::isHomogeneousAggregateSmallEnough`, but I'm not confident I got a complete translation, particularly because Clang includes a lot of checks that I don't believe are necessary for rustc.

Fixes #24154.
@bors
Copy link
Contributor

bors commented Apr 16, 2015

⌛ Testing commit 1a44b38 with merge e9080ec...

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.

aarch64-apple-ios: Returning structs by value in extern "C" functions uses wrong calling convention
6 participants