rust/tests/codegen
bors 96477c55bc Auto merge of #131341 - taiki-e:ppc-clobber-abi, r=bzEq,workingjubilee
Support clobber_abi and vector registers (clobber-only) in PowerPC inline assembly

This supports `clobber_abi` which is one of the requirements of stabilization mentioned in #93335.

This basically does a similar thing I did in https://github.com/rust-lang/rust/pull/130630 to implement `clobber_abi` for s390x, but for powerpc/powerpc64/powerpc64le.
- This also supports vector registers (as `vreg`) as clobber-only, which need to support clobbering of them to implement `clobber_abi`.
- `vreg` should be able to accept `#[repr(simd)]` types as input/output if the unstable `altivec` target feature is enabled, but `core::arch::{powerpc,powerpc64}` vector types, `#[repr(simd)]`, and `core::simd` are all unstable, so the fact that this is currently a clobber-only should not be considered a blocker of clobber_abi implementation or stabilization. So I have not implemented it in this PR.
  - See https://github.com/rust-lang/rust/pull/131551 (which is based on this PR) for a PR to implement this.
  - (I'm not sticking to whether that PR should be a separate PR or part of this PR, so I can merge that PR into this PR if needed.)

Refs:
- PPC32 SysV: Section "Function Calling Sequence" in [System V Application Binary Interface PowerPC Processor Supplement](https://refspecs.linuxfoundation.org/elf/elfspec_ppc.pdf)
- PPC64 ELFv1: Section 3.2 "Function Calling Sequence" in [64-bit PowerPC ELF Application Binary Interface Supplement](https://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.html#FUNC-CALL)
- PPC64 ELFv2: Section 2.2 "Function Calling Sequence" in [64-Bit ELF V2 ABI Specification](https://openpowerfoundation.org/specifications/64bitelfabi/)
- AIX: [Register usage and conventions](https://www.ibm.com/docs/en/aix/7.3?topic=overview-register-usage-conventions), [Special registers in the PowerPC®](https://www.ibm.com/docs/en/aix/7.3?topic=overview-special-registers-in-powerpc), [AIX vector programming](https://www.ibm.com/docs/en/aix/7.3?topic=concepts-aix-vector-programming)
- Register definition in LLVM: https://github.com/llvm/llvm-project/blob/llvmorg-19.1.0/llvm/lib/Target/PowerPC/PPCRegisterInfo.td#L189

If I understand the above four ABI documentations correctly, except for the PPC32 SysV's VR (Vector Registers) and 32-bit AIX (currently not supported by rustc)'s r13, there does not appear to be important differences in terms of implementing `clobber_abi`:
- The above four ABIs are consistent about FPR (0-13: volatile, 14-31: nonvolatile), CR (0-1,5-7: volatile, 2-4: nonvolatile), XER (volatile), and CTR (volatile).
- As for GPR, only the registers we are treating as reserved are slightly different
  - r0, r3-r12 are volatile
  - r1(sp, reserved), r14-31 are nonvolatile
  - r2(reserved) is TOC pointer in PPC64 ELF/AIX, system-reserved register in PPC32 SysV (AFAIK used as thread pointer in Linux/BSDs)
  - r13(reserved for non-32-bit-AIX) is thread pointer in PPC64 ELF, small data area pointer register in PPC32 SysV, "reserved under 64-bit environment; not restored across system calls[^r13]" in AIX)
- As for FPSCR, volatile in PPC64 ELFv1/AIX, some fields are volatile only in certain situations (rest are volatile) in PPC32 SysV/PPC64 ELFv2.
- As for VR (Vector Registers), it is not mentioned in PPC32 SysV, v0-v19 are volatile in both in PPC64 ELF/AIX, v20-v31 are nonvolatile in PPC64 ELF, reserved or nonvolatile depending on the ABI ([vec-extabi vs vec-default in LLVM](https://reviews.llvm.org/D89684), we are [using vec-extabi](https://github.com/rust-lang/rust/pull/131341#discussion_r1797693299)) in AIX:
  > When the default Vector enabled mode is used, these registers are reserved and must not be used.
  > In the extended ABI vector enabled mode, these registers are nonvolatile and their values are preserved across function calls

  I left [FIXME comment about PPC32 SysV](https://github.com/rust-lang/rust/pull/131341#discussion_r1790496095) and added ABI check for AIX.
- As for VRSAVE, it is not mentioned in PPC32 SysV, nonvolatile in PPC64 ELFv1, reserved in PPC64 ELFv2/AIX
- As for VSCR, it is not mentioned in PPC32 SysV/PPC64 ELFv1, some fields are volatile only in certain situations (rest are volatile) in PPC64 ELFv2, volatile in AIX

We are currently treating r1-r2, r13 (non-32-bit-AIX), r29-r31, LR, CTR, and VRSAVE as reserved.
We are currently not processing anything about FPSCR and VSCR, but I feel those are things that should be processed by `preserves_flags` rather than `clobber_abi` if we need to do something about them. (However, PPCRegisterInfo.td in LLVM does not seem to define anything about them.)

Replaces #111335 and #124279

cc `@ecnelises` `@bzEq` `@lu-zero`

r? `@Amanieu`

`@rustbot` label +O-PowerPC +A-inline-assembly

[^r13]: callee-saved, according to [LLVM](6a6af0246b/llvm/lib/Target/PowerPC/PPCCallingConv.td (L322)) and [GCC](a9173a50e7/gcc/config/rs6000/rs6000.h (L859)).
2024-11-05 03:13:47 +00:00
..
asm Support clobber_abi and vector registers (clobber-only) in PowerPC inline assembly 2024-11-02 20:26:08 +09:00
auxiliary Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
avr Rename Receiver -> LegacyReceiver 2024-10-22 12:55:16 +00:00
cffi more asm! -> naked_asm! in tests 2024-10-06 18:12:25 +02:00
compiletest-self-test tests/codegen: add minicore compiletest self-test 2024-10-31 18:20:11 +08:00
cross-crate-inlining [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
debug-accessibility [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
dllimports Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
enum Update the minimum external LLVM to 18 2024-09-18 13:53:31 -07:00
float x86-32 float return for 'Rust' ABI: treat all float types consistently 2024-10-20 11:41:08 +02:00
instrument-coverage Disallow setting built-in cfgs via set the command-line 2024-08-07 14:08:34 +02:00
instrument-xray [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
intrinsics Set signext or zeroext for integer arguments on RISC-V 2024-10-23 04:42:03 +02:00
issues Add a Few Codegen Tests 2024-11-02 05:33:56 +00:00
lib-optimizations Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
loongarch-abi Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
macos Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
meta-filecheck Allow tests to specify a //@ filecheck-flags: header 2024-02-23 11:28:06 +11:00
naked-fn disallow asm! in #[naked] functions 2024-10-06 18:12:25 +02:00
non-terminate Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
patchable-function-entry Updated code for changes to RFC, added additional error handling, added 2024-06-25 19:00:02 +02:00
remap_path_prefix [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
repr tests: Move wasm32 to transparent-opaque-ptr.rs test 2024-09-18 12:31:51 -07:00
riscv-abi Let InstCombine remove Clone shims inside Clone shims 2024-07-25 15:14:42 -04:00
sanitizer Rollup merge of #130225 - adetaylor:rename-old-receiver, r=wesleywiser 2024-10-24 14:19:53 +11:00
simd Ban non-array SIMD 2024-09-09 19:39:43 -07:00
simd-intrinsic Ban non-array SIMD 2024-09-09 19:39:43 -07:00
src-hash-algorithm [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
unwind-abis Remove c_unwind from tests and fix tests 2024-06-19 13:54:55 +01:00
aarch64-struct-align-128.rs Disallow setting built-in cfgs via set the command-line 2024-08-07 14:08:34 +02:00
abi-efiapi.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
abi-main-signature-16bit-c-int.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
abi-main-signature-32bit-c-int.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
abi-repr-ext.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
abi-sysv64.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
abi-x86_64_sysv.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
abi-x86-interrupt.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
addr-of-mutate.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
adjustments.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
align-byval-alignment-mismatch.rs Remove c_unwind from tests and fix tests 2024-06-19 13:54:55 +01:00
align-byval-vector.rs Ban non-array SIMD 2024-09-09 19:39:43 -07:00
align-byval.rs tests: Remove test for wrong wasm codegen 2024-09-18 12:28:55 -07:00
align-enum.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
align-fn.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
align-offset.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
align-struct.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
alloc-optimisation.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
array-clone.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
array-cmp.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
array-codegen.rs use [N x i8] for alloca types 2024-04-11 21:42:35 -04:00
array-equality.rs Stabilize generic NonZero. 2024-04-22 18:48:47 +02:00
array-from_fn.rs test(std): Add codegen test for array::from_fn optimization 2024-08-10 10:44:24 +08:00
array-map.rs use [N x i8] for alloca types 2024-04-11 21:42:35 -04:00
array-optimized.rs Remove my scalar_copy_backend_type optimization attempt 2024-04-09 08:51:32 -07:00
array-repeat.rs update codegen test for array::repeat 2024-06-19 17:48:05 +02:00
ascii-char.rs codegen tests: Tolerate nuw nsw on trunc 2024-04-11 17:20:08 +00:00
async-closure-debug.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
async-fn-debug-awaitee-field.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
async-fn-debug-msvc.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
async-fn-debug.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
atomic-operations.rs Reformat use declarations. 2024-07-29 08:26:52 +10:00
atomicptr.rs move strict provenance lints to new feature gate, remove old feature gates 2024-10-21 15:22:17 +01:00
autovectorize-f32x4.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
binary-heap-peek-mut-pop-no-panic.rs Avoid emptiness check in PeekMut::pop 2024-10-03 22:15:52 +08:00
binary-search-index-no-bound-check.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
bool-cmp.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
box-uninit-bytes.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
bpf-alu32.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
branch-protection-old-llvm.rs Set branch protection function attributes 2024-07-24 17:13:25 +02:00
branch-protection.rs Set branch protection function attributes 2024-07-24 17:13:25 +02:00
call-llvm-intrinsics.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
call-metadata.rs Add range attribute to scalar function results and arguments 2024-08-11 19:40:44 +02:00
cast-optimized.rs Add range attribute to scalar function results and arguments 2024-08-11 19:40:44 +02:00
cast-target-abi.rs Add -Zlint-llvm-ir 2024-08-29 18:12:31 +08:00
catch-unwind.rs Remove c_unwind from tests and fix tests 2024-06-19 13:54:55 +01:00
cdylib-external-inline-fns.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
cf-protection.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
cfguard-checks.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
cfguard-disabled.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
cfguard-nochecks.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
cfguard-non-msvc.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
char-ascii-branchless.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
checked_ilog.rs Set signext or zeroext for integer arguments on RISC-V 2024-10-23 04:42:03 +02:00
checked_math.rs Set signext or zeroext for integer arguments on RISC-V 2024-10-23 04:42:03 +02:00
clone_as_copy.rs Mark simplify_aggregate_to_copy mir-opt as unsound 2024-10-31 13:48:06 +08:00
clone-shims.rs Let InstCombine remove Clone shims inside Clone shims 2024-07-25 15:14:42 -04:00
codemodels.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
coercions.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
cold-call-declare-and-call.rs Disallow setting built-in cfgs via set the command-line 2024-08-07 14:08:34 +02:00
common_prim_int_ptr.rs Add range attribute to scalar function results and arguments 2024-08-11 19:40:44 +02:00
comparison-operators-2-tuple.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
comparison-operators-newtype.rs Set signext or zeroext for integer arguments on RISC-V 2024-10-23 04:42:03 +02:00
const_scalar_pair.rs Fix tests and bless 2024-04-24 13:12:33 +01:00
const-vector.rs Ban non-array SIMD 2024-09-09 19:39:43 -07:00
constant-branch.rs Compute reachable locals as part of non_ssa_locals 2024-09-21 01:07:00 -04:00
consts.rs Use FileCheck to parameterize codegen tests over hashes 2024-06-04 01:30:51 -07:00
coroutine-debug-msvc.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
coroutine-debug.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
dealloc-no-unwind.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
debug-alignment.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
debug-column-msvc.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
debug-column.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
debug-compile-unit-path.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
debug-fndef-size.rs Adjust dbg.value/dbg.declare checks for LLVM update 2024-05-06 23:15:48 +00:00
debug-limited.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
debug-line-directives-only.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
debug-line-tables-only.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
debug-linkage-name.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
debug-vtable.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
debuginfo-constant-locals.rs Adjust dbg.value/dbg.declare checks for LLVM update 2024-05-06 23:15:48 +00:00
debuginfo-generic-closure-env-names.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
debuginfo-inline-callsite-location.rs Rework MIR inlining debuginfo so function parameters show up in debuggers. 2024-08-12 19:20:00 -07:00
deduced-param-attrs.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
default-requires-uwtable.rs Disallow setting built-in cfgs via set the command-line 2024-08-07 14:08:34 +02:00
default-visibility.rs Use Default visibility for rustc-generated C symbol declarations 2024-10-11 08:43:27 +11:00
direct-access-external-data.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
dont_codegen_private_const_fn_only_used_in_const_eval.rs Also support generic constants 2024-06-05 15:40:11 +00:00
drop-in-place-noalias.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
drop.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
dst-offset.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
dst-vtable-align-nonzero.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
dst-vtable-size-range.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
ehcontguard_disabled.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
ehcontguard_enabled.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
emcripten-catch-unwind.rs Let InstCombine remove Clone shims inside Clone shims 2024-07-25 15:14:42 -04:00
enable-lto-unit-splitting.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
error-provide.rs Apply suggestion. 2024-06-16 17:19:25 +08:00
export-no-mangle.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
external-no-mangle-fns.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
external-no-mangle-statics.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
fastcall-inreg.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
fatptr.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
fewer-names.rs Set signext or zeroext for integer arguments on RISC-V 2024-10-23 04:42:03 +02:00
fixed-x18.rs Add -Zfixed-x18 2024-05-03 14:32:08 +02:00
float_math.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
fn-impl-trait-self.rs Update test directives for wasm32-wasip1 2024-03-11 09:36:35 -07:00
force-frame-pointers.rs test: ignore force-frame-pointers test on some targets 2024-06-23 00:40:43 -07:00
force-no-unwind-tables.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
force-unwind-tables.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
frame-pointer.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
function-arguments-noopt.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
function-arguments.rs Set signext or zeroext for integer arguments on RISC-V 2024-10-23 04:42:03 +02:00
function-return.rs Add missing module flags for function-return=thunk-extern 2024-09-25 15:53:53 +02:00
gdb_debug_script_load.rs Make more of the test suite run on Mac Catalyst 2024-05-28 12:31:33 +02:00
generic-debug.rs reenable some windows tests 2024-07-14 13:48:29 +03:00
i128-x86-align.rs Return values larger than 2 registers using a return area pointer 2024-10-10 14:24:43 +00:00
infallible-unwrap-in-opt-z.rs Ignore less tests in debug builds 2024-02-23 18:04:01 -05:00
inherit_overflow.rs Codegen const panic messages as function calls 2024-03-22 09:55:50 -04:00
inline-always-works-always.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
inline-debuginfo.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
inline-function-args-debug-info.rs Rework MIR inlining debuginfo so function parameters show up in debuggers. 2024-08-12 19:20:00 -07:00
inline-hint.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
instrument-mcount.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
integer-cmp.rs llvm 20: adapt integer comparison tests 2024-08-22 13:23:00 +00:00
integer-overflow.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
internalize-closures.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
intrinsic-no-unnamed-attr.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
is_val_statically_known.rs Fix is_val_statically_known for floats 2024-08-17 02:14:23 +01:00
issue-97217.rs Update the minimum external LLVM to 18 2024-09-18 13:53:31 -07:00
iter-repeat-n-trivial-drop.rs llvm: Tolerate propagated range metadata 2024-10-16 18:38:26 +00:00
layout-size-checks.rs Ignore less tests in debug builds 2024-02-23 18:04:01 -05:00
lifetime_start_end.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
link_section.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
link-dead-code.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
llvm_module_flags.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
llvm-ident.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
loads.rs Stabilize generic NonZero. 2024-04-22 18:48:47 +02:00
local-generics-in-exe-internalized.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
lto-removes-invokes.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
mainsubprogram.rs reenable some windows tests 2024-07-14 13:48:29 +03:00
mainsubprogramstart.rs reenable some windows tests 2024-07-14 13:48:29 +03:00
match-optimized.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
match-optimizes-away.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
match-unoptimized.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
maybeuninit-rvo.rs Update the minimum external LLVM to 18 2024-09-18 13:53:31 -07:00
mem-replace-big-type.rs ignore/fix layout-sensitive tests 2024-08-31 23:56:45 +02:00
mem-replace-simple-type.rs At debuginfo=0, don't inline debuginfo when inlining 2024-04-18 09:35:35 -07:00
merge-functions.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
method-declaration.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
mir_zst_stores.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
mir-aggregate-no-alloca.rs Set signext or zeroext for integer arguments on RISC-V 2024-10-23 04:42:03 +02:00
mir-inlined-line-numbers.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
move-before-nocapture-ref-arg.rs Update the minimum external LLVM to 17 2024-03-17 10:11:04 -07:00
move-operands.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
naked-asan.rs various fixes for naked_asm! implementation 2024-10-06 19:00:09 +02:00
no_builtins-at-crate.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
no-alloca-inside-if-false.rs Compute reachable locals as part of non_ssa_locals 2024-09-21 01:07:00 -04:00
no-assumes-on-casts.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
no-dllimport-w-cross-lang-lto.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
no-jump-tables.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
no-plt.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
no-redundant-item-monomorphization.rs Port issue-7349 to a codegen test 2024-04-04 21:59:08 +01:00
noalias-box-off.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
noalias-box.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
noalias-flag.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
noalias-freeze.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
noalias-refcell.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
noalias-rwlockreadguard.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
noalias-unpin.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
noreturn-uninhabited.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
noreturnflag.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
nounwind.rs reenable some windows tests 2024-07-14 13:48:29 +03:00
nrvo.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
optimize-attr-1.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
option-as-slice.rs Add precondition checks to ptr::offset, ptr::add, ptr::sub 2024-10-07 11:12:58 -04:00
option-niche-eq.rs Update the minimum external LLVM to 18 2024-09-18 13:53:31 -07:00
overaligned-constant.rs use [N x i8] for alloca types 2024-04-11 21:42:35 -04:00
packed.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
panic-abort-windows.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
panic-in-drop-abort.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
panic-unwind-default-uwtable.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
pattern_type_symbols.rs Use FileCheck to parameterize codegen tests over hashes 2024-06-04 01:30:51 -07:00
personality_lifetimes.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
pgo-counter-bias.rs Use -Zno-profiler-runtime instead of //@ needs-profiler-support 2024-06-14 13:31:46 +10:00
pgo-instrumentation.rs Use -Zno-profiler-runtime instead of //@ needs-profiler-support 2024-06-14 13:31:46 +10:00
pic-relocation-model.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
pie-relocation-model.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
placement-new.rs add codegen test 2024-10-22 02:25:38 -07:00
powerpc64le-struct-align-128.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
precondition-checks.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
ptr-arithmetic.rs Ignore less tests in debug builds 2024-02-23 18:04:01 -05:00
ptr-read-metadata.rs adapt a codegen test for llvm 19 2024-04-29 13:03:45 +00:00
range-attribute.rs Set signext or zeroext for integer arguments on RISC-V 2024-10-23 04:42:03 +02:00
README.md Move /src/test to /tests 2023-01-11 09:32:08 +00:00
refs.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
regparm-inreg.rs compiler: Revert -Zregparm handling for extern Rust 2024-10-18 11:59:20 -07:00
repeat-trusted-len.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
riscv-target-abi.rs Always specify llvm_abiname for RISC-V targets 2024-10-17 02:07:02 +01:00
rust-abi-arch-specific-adjustment.rs Set signext or zeroext for integer arguments on LoongArch64 2024-10-23 04:42:21 +02:00
scalar-pair-bool.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
set-discriminant-invalid.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
skip-mono-inside-if-false.rs Avoid lowering code under dead SwitchInt targets 2024-03-12 19:01:04 -04:00
slice_as_from_ptr_range.rs Ignore less tests in debug builds 2024-02-23 18:04:01 -05:00
slice-as_chunks.rs Ignore less tests in debug builds 2024-02-23 18:04:01 -05:00
slice-indexing.rs Use unchecked_sub in str indexing 2024-04-06 14:09:03 -04:00
slice-init.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
slice-iter-fold.rs Ignore less tests in debug builds 2024-02-23 18:04:01 -05:00
slice-iter-len-eq-zero.rs Ignore less tests in debug builds 2024-02-23 18:04:01 -05:00
slice-iter-nonnull.rs ignore/fix layout-sensitive tests 2024-08-31 23:56:45 +02:00
slice-pointer-nonnull-unwrap.rs Update the minimum external LLVM to 18 2024-09-18 13:53:31 -07:00
slice-position-bounds-check.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
slice-ref-equality.rs Stabilize generic NonZero. 2024-04-22 18:48:47 +02:00
slice-reverse.rs Ignore less tests in debug builds 2024-02-23 18:04:01 -05:00
slice-windows-no-bounds-check.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
some-abis-do-extend-params-to-32-bits.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
some-global-nonnull.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
sparc-struct-abi.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
split-lto-unit.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
sroa-fragment-debuginfo.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
sse42-implies-crc32.rs Fix codegen tests 2024-08-07 00:41:48 -04:00
stack-probes-inline.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
stack-protector.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
static-relocation-model-msvc.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
staticlib-external-inline-fns.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
step_by-overflow-checks.rs Don't emit divide-by-zero panic paths in StepBy::len 2024-04-06 11:37:57 -07:00
stores.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
swap-large-types.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
swap-small-types.rs use [N x i8] for alloca types 2024-04-11 21:42:35 -04:00
target-cpu-on-functions.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
target-feature-inline-closure.rs Add inline comments why we're forcing the target cpu 2024-05-01 16:54:20 -07:00
target-feature-overrides.rs Add implied features to non-target-feature functions 2024-08-07 00:41:48 -04:00
thread-local.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
tied-features-strength.rs tests: Update with new aarch64 target features 2024-08-27 12:06:30 +00:00
to_vec.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
trailing_zeros.rs Update the minimum external LLVM to 17 2024-03-17 10:11:04 -07:00
transmute-optimized.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
transmute-scalar.rs Set signext or zeroext for integer arguments on RISC-V 2024-10-23 04:42:03 +02:00
try_question_mark_nop.rs Mark simplify_aggregate_to_copy mir-opt as unsound 2024-10-31 13:48:06 +08:00
tune-cpu-on-functions.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
tuple-layout-opt.rs Fix test expectations for 32bit x86 2024-10-19 13:09:21 +00:00
ub-checks.rs Put checks that detect UB under their own flag below debug_assertions 2024-04-06 11:21:47 -04:00
unchecked_shifts.rs codegen tests: Tolerate nuw nsw on trunc 2024-04-11 17:20:08 +00:00
unchecked-float-casts.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
uninit-consts.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
union-abi.rs Set signext or zeroext for integer arguments on RISC-V 2024-10-23 04:42:03 +02:00
unwind-and-panic-abort.rs Remove c_unwind from tests and fix tests 2024-06-19 13:54:55 +01:00
unwind-extern-exports.rs Remove c_unwind from tests and fix tests 2024-06-19 13:54:55 +01:00
unwind-extern-imports.rs Remove c_unwind from tests and fix tests 2024-06-19 13:54:55 +01:00
unwind-landingpad-cold.rs Update the minimum external LLVM to 18 2024-09-18 13:53:31 -07:00
unwind-landingpad-inline.rs Update the minimum external LLVM to 18 2024-09-18 13:53:31 -07:00
used_with_arg.rs Move /src/test to /tests 2023-01-11 09:32:08 +00:00
var-names.rs Set signext or zeroext for integer arguments on RISC-V 2024-10-23 04:42:03 +02:00
vec_pop_push_noop.rs Fix test. 2024-03-29 15:37:43 -07:00
vec-as-ptr.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
vec-calloc.rs Ignore less tests in debug builds 2024-02-23 18:04:01 -05:00
vec-in-place.rs add codegen test for issue 120493 2024-05-20 09:21:09 -05:00
vec-iter-collect-len.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
vec-iter.rs Ignore less tests in debug builds 2024-02-23 18:04:01 -05:00
vec-len-invariant.rs Avoid reloading Vec::len across grow_one in push 2024-04-20 21:07:00 -04:00
vec-optimizes-away.rs Ignore less tests in debug builds 2024-02-23 18:04:01 -05:00
vec-reserve-extend.rs Ignore less tests in debug builds 2024-02-23 18:04:01 -05:00
vec-shrink-panik.rs Update the minimum external LLVM to 17 2024-03-17 10:11:04 -07:00
vec-with-capacity.rs try_with_capacity for Vec, VecDeque, String 2024-03-01 18:24:02 +00:00
vecdeque_no_panic.rs Ignore less tests in debug builds 2024-02-23 18:04:01 -05:00
vecdeque_pop_push.rs Add invariant to VecDeque::pop_* that len < cap if pop successful 2024-04-08 12:12:13 +02:00
vecdeque-drain.rs ignore/fix layout-sensitive tests 2024-08-31 23:56:45 +02:00
vecdeque-nonempty-get-no-panic.rs Ignore less tests in debug builds 2024-02-23 18:04:01 -05:00
virtual-function-elimination-32bit.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
virtual-function-elimination.rs Use FileCheck to parameterize codegen tests over hashes 2024-06-04 01:30:51 -07:00
vtable-loads.rs Omit non-needs_drop drop_in_place in vtables 2024-05-27 16:26:56 -04:00
vtable-upcast.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
wasm_casts_trapping.rs [AUTO_GENERATED] Migrate compiletest to use ui_test-style //@ directives 2024-02-22 16:04:04 +00:00
wasm_exceptions.rs Fix wasm_exceptions test 2024-06-19 21:26:48 +01:00
zip.rs Run rustfmt on tests/codegen/. 2024-05-31 15:56:43 +10:00
zst-offset.rs Ban non-array SIMD 2024-09-09 19:39:43 -07:00

The files here use the LLVM FileCheck framework, documented at https://llvm.org/docs/CommandGuide/FileCheck.html.

One extension worth noting is the use of revisions as custom prefixes for FileCheck. If your codegen test has different behavior based on the chosen target or different compiler flags that you want to exercise, you can use a revisions annotation, like so:

// revisions: aaa bbb
// [bbb] compile-flags: --flags-for-bbb

After specifying those variations, you can write different expected, or explicitly unexpected output by using <prefix>-SAME: and <prefix>-NOT:, like so:

// CHECK: expected code
// aaa-SAME: emitted-only-for-aaa
// aaa-NOT:                        emitted-only-for-bbb
// bbb-NOT:  emitted-only-for-aaa
// bbb-SAME:                       emitted-only-for-bbb