about summary refs log tree commit diff
path: root/src/librustc_codegen_ssa
AgeCommit message (Collapse)AuthorLines
2018-12-23Fix recursion limitsJohn Kåre Alsaker-0/+2
2018-12-21Fix alignment for array indexingNikita Popov-3/+13
We need to reduce the alignment with the used offset. If the offset isn't known, we need to reduce with the element size to support arbitrary offsets.
2018-12-18treat ref-to-raw cast like a reborrow: do a special kind of retagRalf Jung-1/+0
2018-12-17Auto merge of #56642 - nikic:llvm-6, r=alexcrichtonbors-25/+2
Bump minimum required LLVM version to 6.0 Based on the discussion in #55842, while the overall position of Rust wrt LLVM continues to be contentious, there does seem to be a consensus that there is no need for continued support of LLVM 5. This PR bumps our version requirement to LLVM 6.0 and makes Travis run against that. I hope that this is going to unblock #52694. If I understand correctly, while this issue still exists in LLVM 6, Ubuntu has backported the relevant patch. r? @alexcrichton
2018-12-14Rollup merge of #56562 - pnkfelix:issue-55465-update-libc-version, ↵kennytm-1/+1
r=alexcrichton Update libc version required by rustc This is meant to be an easy-to-backport fix for #55465
2018-12-14Auto merge of #56351 - davidtwco:issue-55396-stabilize-linker-flavor, r=nagisabors-5/+1
Stabilize `linker-flavor` flag. Part of #55396. This commit moves the linker-flavor flag from a debugging option to a codegen option, thus stabilizing it. There are no feature flags associated with this flag. r? @nagisa
2018-12-13Stabilize `linker-flavor` flag.David Wood-5/+1
This commit moves the linker-flavor flag from a debugging option to a codegen option, thus stabilizing it. There are no feature flags associated with this flag.
2018-12-12Increase required version for crates.io `libc` to get fix from PR ↵Felix S. Klock II-1/+1
rust-lang/libc#1057. Part of issue #55465
2018-12-12Remove `Session::sysroot()`.Nicholas Nethercote-2/+1
Instead of maybe storing its own sysroot and maybe deferring to the one in `Session::opts`, just clone the latter when necessary so one is always directly available. This removes the need for the getter.
2018-12-11Remove env_alloca hackNikita Popov-25/+2
This is no longer necessary for LLVM >= 6.
2018-12-07Various minor/cosmetic improvements to codeAlexander Regueiro-16/+16
2018-12-07Auto merge of #56502 - Zoxc:hir-func, r=eddybbors-11/+11
Use a function to access the Hir map to be able to turn it into a query later r? @eddyb
2018-12-07Auto merge of #56487 - nikic:discard-modules-earlier, r=alexcrichtonbors-94/+139
Discard LLVM modules earlier when performing ThinLTO Currently ThinLTO is performed by first compiling all modules (and keeping them in memory), and then serializing them into ThinLTO buffers in a separate, synchronized step. Modules are later read back from ThinLTO buffers when running the ThinLTO optimization pipeline. We can also find the following comment in `lto.rs`: // FIXME: right now, like with fat LTO, we serialize all in-memory // modules before working with them and ThinLTO. We really // shouldn't do this, however, and instead figure out how to // extract a summary from an in-memory module and then merge that // into the global index. It turns out that this loop is by far // the most expensive portion of this small bit of global // analysis! I don't think that what is suggested here is the right approach: One of the primary benefits of using ThinLTO over ordinary LTO is that it's not necessary to keep all the modules (merged or not) in memory for the duration of the linking step. However, we currently don't really make use of this (at least for crate-local ThinLTO), because we keep all modules in memory until the start of the LTO step. This PR changes the implementation to instead perform the serialization into ThinLTO buffers directly after the initial optimization step. Most of the changes here are plumbing to separate out fat and thin lto handling in `write.rs`, as these now use different intermediate artifacts. For fat lto this will be in-memory modules, for thin lto it will be ThinLTO buffers. r? @alexcrichton
2018-12-06Use a function to access the Hir map to be able to turn it into a query laterJohn Kåre Alsaker-11/+11
2018-12-06Rollup merge of #56500 - ljedrz:cleanup_rest_of_const_lifetimes, r=zackmdavisPietro Albini-1/+1
cleanup: remove static lifetimes from consts A follow-up to https://github.com/rust-lang/rust/pull/56497.
2018-12-04Serialize modules into ThinBuffer after initial optimizationNikita Popov-16/+24
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-04Remove unnecessary parts of run_fat_lto signatureNikita Popov-4/+5
Fat LTO merges into one module, so only return one module.
2018-12-04Separate out methods for running thin and fat LTONikita Popov-8/+14
2018-12-04Separate codepaths for fat and thin LTO in write.rsNikita Popov-27/+56
These are going to have different intermediate artifacts, so create separate codepaths for them.
2018-12-04Refactor LTO type determinationNikita Popov-35/+41
Instead of only determining whether some form of LTO is necessary, determine whether thin, fat or no LTO is necessary. I've rewritten the conditions in a way that I think is more obvious, i.e. specified LTO type + additional preconditions.
2018-12-04Extract free_worker closureNikita Popov-23/+18
2018-12-04cleanup: remove static lifetimes from constsljedrz-1/+1
2018-12-03codegen_llvm_back: improve allocationsljedrz-3/+4
2018-12-02Auto merge of #56198 - bjorn3:cg_ssa_refactor, r=eddybbors-276/+187
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-01Rollup merge of #56349 - davidtwco:issue-55396-inference-extension, r=nagisakennytm-1/+5
rustc 1.30.0's linker flavor inference is a non-backwards compat change to -Clinker Part of #55396. This commit modifies linker flavor inference to only remove the extension to the linker when performing inference if that extension is a 'exe'. r? @nagisa cc @alexcrichton @japaric
2018-11-30proc_macro: introduce a "bridge" between clients (proc macros) and servers ↵Eduard-Mihai Burtescu-1/+1
(compiler front-ends).
2018-11-29Only consider stem when extension is exe.David Wood-1/+5
This commit modifies linker flavor inference to only remove the extension to the linker when performing inference if that extension is a 'exe'.
2018-11-29Move get_static from CodegenCx to Builderbjorn3-4/+8
2018-11-29Use implicit deref instead of BuilderMethods::cx()bjorn3-105/+104
2018-11-29Require Deref to CodegenCx for HasCodegenbjorn3-1/+3
2018-11-29Remove static_addr_of_mut from cg_ssabjorn3-1/+0
2018-11-29Rename StaticMethods::static_ptrcast to ConstMethods::const_ptrcastbjorn3-3/+3
2018-11-29Remove static_bitcast from cg_ssabjorn3-1/+0
2018-11-29Move IntrinsicCallMethods::call_overflow_intrinsics to ↵bjorn3-18/+19
BuilderMethods::checked_binop
2018-11-29Remove call_lifetime_intrinsic from cg_ssabjorn3-10/+4
2018-11-29Use BackendTypes instead of Backend or HasCodegen in a few placesbjorn3-18/+18
2018-11-29Rustfmt on cg_ssa/traitsbjorn3-3/+7
2018-11-29Don't use llvm intrinsic names in cg_ssabjorn3-106/+22
2018-11-29Remove static_replace_all_uses and statics_to_rauw from cg_ssabjorn3-2/+0
2018-11-29Make ConstMethods and StaticMethods require BackendTypes instead of Backendbjorn3-6/+6
2018-11-29Some refactoringsbjorn3-15/+10
2018-11-28Fix alignment of stores to scalar pairNikita Popov-5/+15
The alignment for the second element of a scalar pair is not the same as for the first element. Make sure it is computed correctly based on the element size.
2018-11-25Pass `--export-dynamic` to LLD for wasmAlex Crichton-0/+6
This should handle recent symbol visibility changes happening, although we'll likely want to tweak this in the future!
2018-11-25wasm: Pass `--no-demangle` to LLDAlex Crichton-0/+5
Our mangling scheme is not C++'s, so tell LLD to not demangle anything so we can handle Rust-specific demangling ourselves.
2018-11-25Rollup merge of #56101 - frewsxcv:frewsxcv-dyn, r=steveklabnikPietro Albini-1/+1
Incorporate `dyn` into more comments and docs. r? @rust-lang/docs
2018-11-25Auto merge of #55959 - matthewjasper:remove-end-region, r=nikomatsakisbors-1/+0
Cleanup from lexical MIR borrowck removal Lexical MIR borrowck was removed months ago now, and `EndRegion`s are no longer used for MIRI verification. * Remove `rustc::mir::StatementKind::EndRegion` and the `-Zemit_end_regions` flag * Use `RegionVid` instead of `Region` in BorrowSet * Rewrite drop generation to create fewer goto terminators. r? @nikomatsakis
2018-11-23Merge branch 'master' into frewsxcv-dynCorey Farwell-65/+58
2018-11-24Rollup merge of #56097 - ogoffart:union-abi, r=eddybkennytm-3/+14
Fix invalid bitcast taking bool out of a union represented as a scalar As reported in https://github.com/rust-lang/rust/pull/54668#issuecomment-440186476
2018-11-24Rollup merge of #56048 - bjorn3:cg_ssa_sysroot, r=eddybkennytm-0/+19
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-23Auto merge of #54071 - eddyb:alignsssss, r=oli-obkbors-57/+52
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