Commit Graph

3666 Commits

Author SHA1 Message Date
bjorn3 fbb276e933 Update some dependencies 2023-09-16 10:12:33 +00:00
bjorn3 5c7a87c9ba Merge pull request #1393 from onur-ozkan/rustfmt-group-imports
organize import sections with rustfmt `group_imports`
2023-09-14 21:05:03 +02:00
onur-ozkan e048674ea5 organize import sections with rustfmt group_imports
Signed-off-by: onur-ozkan <work@onurozkan.dev>
2023-09-14 18:45:33 +00:00
bjorn3 02e5f387fa Add debug tracing for failed commands 2023-09-14 18:42:55 +00:00
bjorn3 d8c1393557 Avoid mir_operand_get_const_val for simd_shuffle and cmpps and cmppd 2023-09-14 18:35:34 +00:00
bjorn3 aab17ccd19 Fix rustc test suite 2023-09-14 17:58:00 +00:00
bjorn3 b67a1c4ea7 Rustup to rustc 1.74.0-nightly (8142a319e 2023-09-13) 2023-09-14 16:51:24 +00:00
bjorn3 214d474a85 Sync from rust 8142a319ed 2023-09-14 16:48:54 +00:00
Matthias Krüger 1956fb84f3 Rollup merge of #115798 - RalfJung:non_1zst_field, r=wesleywiser
add helper method for finding the one non-1-ZST field
2023-09-13 18:37:42 +02:00
Matthias Krüger 9475cdb02d Rollup merge of #115736 - Zoxc:time-cleanup, r=wesleywiser
Remove `verbose_generic_activity_with_arg`

This removes `verbose_generic_activity_with_arg` and changes users to `generic_activity_with_arg`. This keeps the output of `-Z time` readable while these repeated events are still available with the self profiling mechanism.
2023-09-13 18:37:41 +02:00
Ralf Jung 8e6f68be39 make the eval() functions on our const types return the resulting value 2023-09-13 07:29:34 +02:00
Ralf Jung 72fb4b8f31 add helper method for finding the one non-1-ZST field 2023-09-12 20:52:05 +02:00
John Kåre Alsaker 4f6e9fd8d3 Remove verbose_generic_activity_with_arg 2023-09-10 17:47:16 +02:00
bors c41e7794cd Auto merge of #115418 - Zoxc:freeze-source, r=oli-obk
Use `Freeze` for `SourceFile`

This uses the `Freeze` type in `SourceFile` to let accessing `external_src` and `lines` be lock-free.

Behavior of `add_external_src` is changed to set `ExternalSourceKind::AbsentErr` on a hash mismatch which matches the documentation. `ExternalSourceKind::Unneeded` was removed as it's unused.

Based on https://github.com/rust-lang/rust/pull/115401.
2023-09-08 17:20:23 +00:00
bjorn3 d72f7109ed Update steps to testing rustc changes for upstream changes 2023-09-07 12:03:27 +00:00
bjorn3 5ae94e91f0 Rustup to rustc 1.74.0-nightly (e3abbd499 2023-09-06) 2023-09-07 11:54:01 +00:00
bjorn3 28f12f057d Merge branch 'sync_from_rust' 2023-09-07 11:45:29 +00:00
John Kåre Alsaker 4ecfd30a86 Use Freeze for SourceFile.lines 2023-09-07 13:05:05 +02:00
bors 6285086ead Auto merge of #115616 - bjorn3:sync_cg_clif-2023-09-06, r=bjorn3
Sync rustc_codegen_cranelift

Not much changed this time. Mostly doing this sync to make it easier to run the entire test suite on the in-tree version.

r? `@ghost`

`@rustbot` label +A-codegen +A-cranelift +T-compiler
2023-09-07 03:56:43 +00:00
bors d4f12a5ed3 Auto merge of #115580 - eduardosm:stdarch-intrinsics, r=davidtwco,bjorn3
Update stdarch submodule and remove special handling in cranelift codegen for some AVX and SSE2 LLVM intrinsics

https://github.com/rust-lang/stdarch/pull/1463 reimplemented some x86 intrinsics to avoid using some x86-specific LLVM intrinsics:

* Store unaligned (`_mm*_storeu_*`) use `<*mut _>::write_unaligned` instead of `llvm.x86.*.storeu.*`.
* Shift by immediate (`_mm*_s{ll,rl,ra}i_epi*`) use `if` (srl, sll) or `min` (sra) to simulate the behaviour when the RHS is out of range. RHS is constant, so the `if`/`min` will be optimized away.

This PR updates the stdarch submodule to pull these changes and removes special handling for those LLVM intrinsics from cranelift codegen. I left gcc codegen untouched because there are some autogenerated lists.
2023-09-06 22:26:37 +00:00
bjorn3 f2211c5242 Merge commit 'dda103b1e33c4902deca8bccf614991ada781fa6' into sync_cg_clif-2023-09-06 2023-09-06 18:51:03 +00:00
bjorn3 dda103b1e3 Rustup to rustc 1.74.0-nightly (a991861ec 2023-09-05) 2023-09-06 18:33:08 +00:00
bjorn3 5920ae5e7b Sync from rust a991861ec9 2023-09-06 18:28:02 +00:00
Eduardo Sánchez Muñoz 4cd5177015 Remove special handling in codegen for some AVX and SSE2 shift by immediate intrinsics
Those were removed from stdarch in https://github.com/rust-lang/stdarch/pull/1463 (`simd_shl` and `simd_shr` are used instead)
2023-09-05 20:17:01 +02:00
Eduardo Sánchez Muñoz 9f562f290d Remove special handling in codegen for some SSE2 "storeu" intrinsics
Those were removed from stdarch in https://github.com/rust-lang/stdarch/pull/1463 (`<*mut _>::write_unaligned` is used instead)
2023-09-05 20:06:50 +02:00
Camille GILLOT 61a0b77e17 Use relative positions inside a SourceFile. 2023-09-03 12:56:10 +00:00
bjorn3 0559de6567 Fix rustc test suite 2023-09-01 13:08:16 +00:00
bjorn3 a756bae8ca Rustup to rustc 1.74.0-nightly (2f5df8a94 2023-08-31) 2023-09-01 13:07:46 +00:00
bjorn3 832422832a Sync from rust 2f5df8a94b 2023-09-01 12:44:06 +00:00
Matthias Krüger 65d75fdc38 Rollup merge of #111580 - atsuzaki:layout-ice, r=oli-obk
Don't ICE on layout computation failure

Fixes #111176 regression.

r? `@oli-obk`
2023-08-29 20:49:02 +02:00
Ralf Jung 833592766f const_eval and codegen: audit uses of is_zst 2023-08-29 09:03:46 +02:00
Katherine Philip b88dfcfcd5 Don't ICE on layout computation failure 2023-08-28 12:40:39 -07:00
Scott McMurray 25a2ba2ee4 Use preserve_mostcc for extern "rust-cold"
As experimentation in 115242 has shown looks better than `coldcc`.

And *don't* use a different convention for cold on Windows, because that actually ends up making things worse.

cc tracking issue 97544
2023-08-26 17:42:59 -07:00
Ralf Jung 3f4145e169 when terminating during unwinding, show the reason why 2023-08-24 13:28:26 +02:00
Ralf Jung 18658cb0c9 give some unwind-related terminators a more clear name 2023-08-20 15:52:38 +02:00
bjorn3 9aa5fbf79c Fix shell helpers in usage docs 2023-08-18 13:15:36 +02:00
dirreke 8c6590a99b reverse change in rustc_codegen_cranelift 2023-08-15 00:09:20 +08:00
dirreke 0b283557e7 reverse change in rustc_codegen_cranelift 2023-08-15 00:03:27 +08:00
dirreke 9ef3a4ff0e Update Cargo.lock 2023-08-14 23:22:19 +08:00
dirreke c4948dc37f Upgrade Object and related deps 2023-08-14 23:05:45 +08:00
Michael Goulet b705d2dcbd Rollup merge of #114622 - petrochenkov:noplugin, r=oli-obk
rustc: Move `crate_types` and `stable_crate_id` from `Session` to `GlobalCtxt`

Removes two pieces of mutable state.
Follow up to https://github.com/rust-lang/rust/pull/114578.
2023-08-10 21:17:07 -07:00
bors 0777ae620b Auto merge of #114673 - matthiaskrgr:rollup-9kroqpp, r=matthiaskrgr
Rollup of 6 pull requests

Successful merges:

 - #110435 (rustdoc-json: Add test for field ordering.)
 - #111891 (feat: `riscv-interrupt-{m,s}` calling conventions)
 - #114377 (test_get_dbpath_for_term(): handle non-utf8 paths (fix FIXME))
 - #114469 (Detect method not found on arbitrary self type with different mutability)
 - #114587 (Convert Const to Allocation in smir)
 - #114670 (Don't use `type_of` to determine if item has intrinsic shim)

Failed merges:

 - #114599 (Add impl trait declarations to SMIR)

r? `@ghost`
`@rustbot` modify labels: rollup
2023-08-09 23:27:46 +00:00
bjorn3 06ed138247 Merge branch 'sync_from_rust' 2023-08-09 18:21:47 +00:00
bjorn3 59cabd7032 Merge commit '8f9ac9c22d6594cf059d8e6c71d414cc5ccd7975' into sync_cg_clif-2023-08-09 2023-08-09 18:20:12 +00:00
bjorn3 8f9ac9c22d Fix MinGW 2023-08-09 10:47:49 +00:00
bjorn3 716dcb7793 Fix rustc test suite 2023-08-09 10:33:57 +00:00
bjorn3 3deb6c69e0 Rustup to rustc 1.73.0-nightly (03a119b0b 2023-08-07) 2023-08-09 10:05:36 +00:00
Vadim Petrochenkov b107241218 rustc: Move crate_types from Session to GlobalCtxt
Removes a piece of mutable state.
Follow up to #114578.
2023-08-09 14:17:54 +08:00
Seth Pellegrino 621be609b5 feat: riscv-interrupt-{m,s} calling conventions
Similar to prior support added for the mips430, avr, and x86 targets
this change implements the rough equivalent of clang's
[`__attribute__((interrupt))`][clang-attr] for riscv targets, enabling
e.g.

```rust
static mut CNT: usize = 0;

pub extern "riscv-interrupt-m" fn isr_m() {
    unsafe {
        CNT += 1;
    }
}
```

to produce highly effective assembly like:

```asm
pub extern "riscv-interrupt-m" fn isr_m() {
420003a0:       1141                    addi    sp,sp,-16
    unsafe {
        CNT += 1;
420003a2:       c62a                    sw      a0,12(sp)
420003a4:       c42e                    sw      a1,8(sp)
420003a6:       3fc80537                lui     a0,0x3fc80
420003aa:       63c52583                lw      a1,1596(a0) # 3fc8063c <_ZN12esp_riscv_rt3CNT17hcec3e3a214887d53E.0>
420003ae:       0585                    addi    a1,a1,1
420003b0:       62b52e23                sw      a1,1596(a0)
    }
}
420003b4:       4532                    lw      a0,12(sp)
420003b6:       45a2                    lw      a1,8(sp)
420003b8:       0141                    addi    sp,sp,16
420003ba:       30200073                mret
```

(disassembly via `riscv64-unknown-elf-objdump -C -S --disassemble ./esp32c3-hal/target/riscv32imc-unknown-none-elf/release/examples/gpio_interrupt`)

This outcome is superior to hand-coded interrupt routines which, lacking
visibility into any non-assembly body of the interrupt handler, have to
be very conservative and save the [entire CPU state to the stack
frame][full-frame-save]. By instead asking LLVM to only save the
registers that it uses, we defer the decision to the tool with the best
context: it can more accurately account for the cost of spills if it
knows that every additional register used is already at the cost of an
implicit spill.

At the LLVM level, this is apparently [implemented by] marking every
register as "[callee-save]," matching the semantics of an interrupt
handler nicely (it has to leave the CPU state just as it found it after
its `{m|s}ret`).

This approach is not suitable for every interrupt handler, as it makes
no attempt to e.g. save the state in a user-accessible stack frame. For
a full discussion of those challenges and tradeoffs, please refer to
[the interrupt calling conventions RFC][rfc].

Inside rustc, this implementation differs from prior art because LLVM
does not expose the "all-saved" function flavor as a calling convention
directly, instead preferring to use an attribute that allows for
differentiating between "machine-mode" and "superivsor-mode" interrupts.

Finally, some effort has been made to guide those who may not yet be
aware of the differences between machine-mode and supervisor-mode
interrupts as to why no `riscv-interrupt` calling convention is exposed
through rustc, and similarly for why `riscv-interrupt-u` makes no
appearance (as it would complicate future LLVM upgrades).

[clang-attr]: https://clang.llvm.org/docs/AttributeReference.html#interrupt-risc-v
[full-frame-save]: https://github.com/esp-rs/esp-riscv-rt/blob/9281af2ecffe13e40992917316f36920c26acaf3/src/lib.rs#L440-L469
[implemented by]: https://github.com/llvm/llvm-project/blob/b7fb2a3fec7c187d58a6d338ab512d9173bca987/llvm/lib/Target/RISCV/RISCVRegisterInfo.cpp#L61-L67
[callee-save]: https://github.com/llvm/llvm-project/blob/973f1fe7a8591c7af148e573491ab68cc15b6ecf/llvm/lib/Target/RISCV/RISCVCallingConv.td#L30-L37
[rfc]: https://github.com/rust-lang/rfcs/pull/3246
2023-08-08 18:09:56 -07:00
bjorn3 82988111b9 Sync from rust 03a119b0b0 2023-08-08 17:12:20 +00:00