Commit graph

620 commits

Author SHA1 Message Date
Mazdak Farrokhzad
eb30d56d37
Rollup merge of #56599 - dlrobertson:fix_va_arg, r=eddyb
codegen: Fix va_list - aarch64 iOS/Windows

## Summary

Fix code generated for `VaList` on Aarch64 iOS/Windows.

## Details

According to the [Apple - ARM64 Function Calling Conventions]:

> ... the type va_list is an alias for char * rather than for the struct
> type specified in the generic PCS.

The current implementation uses the generic Aarch64 structure for `VaList`
for Aarch64 iOS. Switch to using the `char *` variant of the `VaList`
and use the corresponding `emit_ptr_va_arg` for the `va_arg` intrinsic.

Windows always uses the `char *` variant of the `VaList`. Update the `va_arg`
intrinsic to use `emit_ptr_va_arg`.

[Apple - ARM64 Function Calling Conventions]: https://developer.apple.com/library/archive/documentation/Xcode/Conceptual/iPhoneOSABIReference/Articles/ARM64FunctionCallingConventions.html
2018-12-08 08:43:47 +01:00
Alexander Regueiro
ee89c088b0 Various minor/cosmetic improvements to code 2018-12-07 23:53:34 +00:00
Dan Robertson
3dfd8f7a64
codegen: Fix va_list - aaarch64 iOS/Windows
According to the Apple developer docs:

> The type va_list is an alias for char * rather than for the struct
> type specified in the generic PCS.

The current implementation uses the generic Aarch64 structure for VaList
for Aarch64 iOS.

Windows always uses the char * variant of the va_list.
2018-12-07 22:54:56 +00:00
bors
4a45578bc5 Auto merge of #56502 - Zoxc:hir-func, r=eddyb
Use a function to access the Hir map to be able to turn it into a query later

r? @eddyb
2018-12-07 20:04:06 +00:00
John Kåre Alsaker
a70babed03 Use a function to access the Hir map to be able to turn it into a query later 2018-12-06 17:24:36 +01:00
Nikita Popov
8128d0d1a9 Serialize modules into ThinBuffer after initial optimization
Instead of keeping all modules in memory until thin LTO and only
serializing them then, serialize the module immediately after
it finishes optimizing.
2018-12-04 16:24:20 +01:00
Nikita Popov
bc2db43b9e Remove unnecessary parts of run_fat_lto signature
Fat LTO merges into one module, so only return one module.
2018-12-04 16:10:24 +01:00
Nikita Popov
bdbee6311b Separate out methods for running thin and fat LTO 2018-12-04 16:10:24 +01:00
bors
431e0ab62f Auto merge of #55871 - ljedrz:llvm_back_allocations, r=nagisa
codegen_llvm_back: improve allocations

This commit was split out from https://github.com/rust-lang/rust/pull/54864. Last time it was causing an LLVM OOM, which was most probably caused by not collecting the globals.

- preallocate vectors of known length
- `extend` instead of `append` where the argument is consumable
- turn 2 `push` loops into `extend`s
- create a vector from a function producing one instead of using `extend_from_slice` on it
- consume `modules` when no longer needed
- ~~return an `impl Iterator` from `generate_lto_work`~~
- ~~don't `collect` `globals`, as they are iterated over and consumed right afterwards~~

While I'm hoping it won't cause an OOM anymore, I would still consider this a "high-risk" PR and not roll it up.
2018-12-04 11:47:07 +00:00
bors
9cd3bef4cf Auto merge of #55010 - tromey:Bug-9224-generic-parameters, r=michaelwoerister
Add template parameter debuginfo to generic types

This changes debuginfo generation to add template parameters to
generic types.  With this change the DWARF now has
DW_TAG_template_type_param for types, not just for functions, like:

 <2><40d>: Abbrev Number: 6 (DW_TAG_structure_type)
    <40e>   DW_AT_name        : (indirect string, offset: 0x375): Generic<i32>
    <412>   DW_AT_byte_size   : 4
    <413>   DW_AT_alignment   : 4
...
 <3><41f>: Abbrev Number: 8 (DW_TAG_template_type_param)
    <420>   DW_AT_type        : <0x42a>
    <424>   DW_AT_name        : (indirect string, offset: 0xa65e): T

Closes #9224
2018-12-03 11:59:11 +00:00
ljedrz
2043d30c2e codegen_llvm_back: improve allocations 2018-12-03 10:33:02 +01:00
bors
a563ceb3b9 Auto merge of #56358 - nikic:mergefunc-aliases, r=rkruppe
Enable -mergefunc-use-aliases

If the Rust LLVM fork is used, enable the -mergefunc-use-aliases
flag, which will create aliases for merged functions, rather than
inserting a call from one to the other.

A number of codegen tests needed to be adjusted, because functions
that previously fell below the thunk limit are now being merged.
Merging is prevented in various ways now.

I expect that this is going to break something, somewhere, because
it isn't able to deal with aliases properly, but we won't find out
until we try :)

This fixes #52651.

r? @rkruppe
2018-12-03 02:27:15 +00:00
bors
21f2684950 Auto merge of #56198 - bjorn3:cg_ssa_refactor, r=eddyb
Refactor rustc_codegen_ssa

cc #56108 (not all things are done yet)

This removes an unsafe method from cg_ssa.

r? @eddyb
cc @sunfishcode
2018-12-02 18:02:20 +00:00
Nikita Popov
850d2f1af0 Run name-anon-globals after all other passes
name-anon-globals should always be run at the very end of the pass
pipeline, as optimization passes (in particular mergefunc) may
introduce new anonymous globals.

I believe we did not run into this earlier because it requires the
rather specific combination of a) mergefunc merging two weak functions
b) compilation not using thinlto.
2018-12-02 14:41:39 +01:00
kennytm
540f4cfa71
Rollup merge of #56341 - frewsxcv:frewsxcv-util-cstr, r=Mark-Simulacrum
Rename conversion util; remove duplicate util in librustc_codegen_llvm.
2018-12-01 02:03:47 +08:00
Nikita Popov
cbf748993f Enable -mergefunc-use-aliases
If the Rust LLVM fork is used, enable the -mergefunc-use-aliases
flag, which will create aliases for merged functions, rather than
inserting a call from one to the other.

A number of codegen tests needed to be adjusted, because functions
that previously fell below the thunk limit are now being merged.
Merging is prevented either using -C no-prepopulate-passes, or by
making the functions non-identical.

I expect that this is going to break something, somewhere, because
it isn't able to deal with aliases properly, but we won't find out
until we try :)

This fixes #52651.
2018-11-30 00:52:16 +01:00
Tom Tromey
fb204cb92f Add template parameter debuginfo to generic types
This changes debuginfo generation to add template parameters to
generic types.  With this change the DWARF now has
DW_TAG_template_type_param for types, not just for functions, like:

 <2><40d>: Abbrev Number: 6 (DW_TAG_structure_type)
    <40e>   DW_AT_name        : (indirect string, offset: 0x375): Generic<i32>
    <412>   DW_AT_byte_size   : 4
    <413>   DW_AT_alignment   : 4
...
 <3><41f>: Abbrev Number: 8 (DW_TAG_template_type_param)
    <420>   DW_AT_type        : <0x42a>
    <424>   DW_AT_name        : (indirect string, offset: 0xa65e): T

Closes #9224
2018-11-29 13:04:09 -07:00
bors
3e90a12a8a Auto merge of #49878 - dlrobertson:va_list_pt0, r=eddyb
libcore: Add VaList and variadic arg handling intrinsics

## Summary

 - Add intrinsics for `va_start`, `va_end`, `va_copy`, and `va_arg`.
 - Add `core::va_list::VaList` to `libcore`.

Part 1 of (at least) 3 for #44930

Comments and critiques are very much welcomed 😄
2018-11-29 19:28:21 +00:00
bjorn3
d108a913c7 Move get_static from CodegenCx to Builder 2018-11-29 18:19:44 +01:00
bjorn3
ceb29e2ac4 Use implicit deref instead of BuilderMethods::cx() 2018-11-29 18:19:44 +01:00
bjorn3
e45733048e Require Deref to CodegenCx for HasCodegen 2018-11-29 18:19:44 +01:00
bjorn3
f47505e867 Rename static_bitcast to const_bitcast 2018-11-29 18:19:43 +01:00
bjorn3
e8da3c6c32 Remove static_addr_of_mut from cg_ssa 2018-11-29 18:19:43 +01:00
bjorn3
aaca5a38ee Rename StaticMethods::static_ptrcast to ConstMethods::const_ptrcast 2018-11-29 18:19:43 +01:00
bjorn3
59682d3e2a Remove static_bitcast from cg_ssa 2018-11-29 18:19:43 +01:00
bjorn3
b8d55d45ce Remove an unnecessary reference 2018-11-29 18:19:43 +01:00
bjorn3
2d4c96d1b1 Move IntrinsicCallMethods::call_overflow_intrinsics to BuilderMethods::checked_binop 2018-11-29 18:19:42 +01:00
bjorn3
9a9045573f Remove call_lifetime_intrinsic from cg_ssa 2018-11-29 18:19:42 +01:00
bjorn3
15a5009af0 Don't use llvm intrinsic names in cg_ssa 2018-11-29 18:19:41 +01:00
bjorn3
2d46ee26fb Remove static_replace_all_uses and statics_to_rauw from cg_ssa 2018-11-29 18:19:41 +01:00
bjorn3
436eff5e84 Make ConstMethods and StaticMethods require BackendTypes instead of Backend 2018-11-29 18:19:41 +01:00
bjorn3
b3b6e4dd9b Some refactorings 2018-11-29 18:19:41 +01:00
Corey Farwell
2a91bbac5d Rename conversion util; remove duplicate util in librustc_codegen_llvm. 2018-11-29 08:09:28 -05:00
Guillaume Gomez
2d3236c68f
Rollup merge of #56257 - mark-i-m:rustc-guide-links, r=nikomatsakis
rustc-guide has moved to rust-lang/

r? @nikomatsakis
2018-11-29 13:10:44 +01:00
Eduard-Mihai Burtescu
51cf4e9e91 rustc_codegen_llvm: don't overalign loads of pair operands. 2018-11-29 00:37:38 +02:00
Dan Robertson
08140878fe
libcore: Add va_list lang item and intrinsics
- Add the llvm intrinsics used to manipulate a va_list.
 - Add the va_list lang item in order to allow implementing
   VaList in libcore.
2018-11-26 22:56:19 +00:00
Mark Mansi
6494f1e60e rustc-guide has moved 2018-11-26 15:03:13 -06:00
Pietro Albini
ab5e45ae6b
Rollup merge of #56075 - alexcrichton:wasm-producer-section, r=estebank
Encode a custom "producers" section in wasm files

This commit implements WebAssembly/tool-conventions#65 for wasm files
produced by the Rust compiler. This adds a bit of metadata to wasm
modules to indicate that the file's language includes Rust and the
file's "processed-by" tools includes rustc.

The thinking with this section is to eventually have telemetry in
browsers tracking all this.
2018-11-25 17:05:01 +01:00
scalexm
05995a8522 Introduce TyKind::Placeholder variant 2018-11-24 01:24:40 +01:00
kennytm
c9870a4fe7
Rollup merge of #56154 - petrhosek:fuchsia-linker-args, r=alexcrichton
Pass additional linker flags when targeting Fuchsia

This is a follow up to 8aa9267 which changed the driver to use lld
directly rather than invoking it through Clang. This change ensures
we pass all the necessary flags to lld.
2018-11-24 01:31:59 +08:00
kennytm
1b707f78f5
Rollup merge of #56048 - bjorn3:cg_ssa_sysroot, r=eddyb
Add rustc_codegen_ssa to sysroot

Outside of rustc you are currently unable to use it.

r? @nikomatsakis (because you r+'ed #55627)
2018-11-24 01:31:53 +08:00
bors
6a2d1b4e15 Auto merge of #54071 - eddyb:alignsssss, r=oli-obk
rustc_target: separate out an individual alignment quantity type from Align.

Before this PR, `rustc_target::abi::Align` combined "power-of-two alignment quantity" semantics, with a distinction between ABI (required) and preferred alignment (by having two quantities).

After this PR, `Align` is only *one* such quantity, and a new `AbiAndPrefAlign` type is introduced to hold the pair of ABI and preferred `Align` quantities.

`Align` is used everywhere one quantity is necessary/sufficient, simplifying some of the code in codegen/miri, while `AbiAndPrefAlign` only in layout computation (to propagate preferred alignment).

r? @oli-obk cc @nagisa @RalfJung @nikomatsakis
2018-11-23 01:02:21 +00:00
bjorn3
d6d8a330f8 Add rustc_codegen_ssa to sysroot 2018-11-22 20:20:23 +01:00
Petr Hosek
f41423c75f Pass additional linker flags when targeting Fuchsia
This is a follow up to 8aa9267 which changed the driver to use lld
directly rather than invoking it through Clang. This change ensures
we pass all the necessary flags to lld.
2018-11-22 00:59:37 -08:00
Eduard-Mihai Burtescu
5b4747ded7 rustc_target: avoid using AbiAndPrefAlign where possible. 2018-11-22 05:01:49 +02:00
Eduard-Mihai Burtescu
3ce8d444af rustc_target: separate out an individual Align from AbiAndPrefAlign. 2018-11-22 04:38:00 +02:00
Eduard-Mihai Burtescu
d56e892085 rustc_target: rename abi::Align to AbiAndPrefAlign. 2018-11-22 04:12:59 +02:00
Eduard-Mihai Burtescu
da622a3796 rustc: remove {FxHash,Node,DefId,HirId,ItemLocal}{Map,Set} "constructor" fns. 2018-11-21 07:27:02 +02:00
Alex Crichton
089a50411f Encode a custom "producers" section in wasm files
This commit implements WebAssembly/tool-conventions#65 for wasm files
produced by the Rust compiler. This adds a bit of metadata to wasm
modules to indicate that the file's language includes Rust and the
file's "processed-by" tools includes rustc.

The thinking with this section is to eventually have telemetry in
browsers tracking all this.
2018-11-19 12:09:19 -08:00
Eduard-Mihai Burtescu
756f84d7ce [eddyb] rustc_codegen_llvm: remove unused parametrization of CodegenCx and Builder over Values. 2018-11-16 15:08:18 +02:00