rust/compiler/rustc_codegen_llvm/src
Matthias Krüger f4f644182b
Rollup merge of #123775 - scottmcm:place-val, r=cjgillot
Make `PlaceRef` and `OperandValue::Ref` share a common `PlaceValue` type

Both `PlaceRef` and `OperandValue::Ref` need the triple of the backend pointer immediate, the optional backend metadata for DSTs, and the actual alignment of the place (since it can differ from the ABI alignment).

This PR introduces a new `PlaceValue` type for those three values, leaving [`PlaceRef`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/mir/place/struct.PlaceRef.html) with the `TyAndLayout` and a `PlaceValue`, just like how [`OperandRef`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/mir/operand/struct.OperandRef.html) is a `TyAndLayout` and an `OperandValue`.

This means that various places that use `Ref`s as places can just pass the `PlaceValue` along, like in the below excerpt from the diff:
```diff
        match operand.val {
-            OperandValue::Ref(ptr, meta, align) => {
-                debug_assert_eq!(meta, None);
+            OperandValue::Ref(source_place_val) => {
+                debug_assert_eq!(source_place_val.llextra, None);
                debug_assert!(matches!(operand_kind, OperandValueKind::Ref));
-                let fake_place = PlaceRef::new_sized_aligned(ptr, cast, align);
+                let fake_place = PlaceRef { val: source_place_val, layout: cast };
                Some(bx.load_operand(fake_place).val)
            }
```

There's more refactoring that I'd like to do after this, but I wanted to stop the PR here where it's hopefully easy (albeit probably not quick) to review since I tried to keep every change line-by-line clear.  (Most are just adding `.val` to get to a field.)

You can also go commit-at-a-time if you'd like.  Each passed tidy and the codegen tests on my machine (though I didn't run the cg_gcc ones).
2024-04-12 04:38:21 +02:00
..
back Set target-abi module flag for RISC-V targets 2024-04-09 05:25:51 +02:00
coverageinfo Auto merge of #123455 - matthiaskrgr:rollup-b6nu296, r=matthiaskrgr 2024-04-04 13:10:22 +00:00
debuginfo Set target-abi module flag for RISC-V targets 2024-04-09 05:25:51 +02:00
llvm Pass value and valueLen to create a StringRef 2024-04-09 08:53:11 +02:00
abi.rs Put PlaceValue into OperandValue::Ref, rather than 3 tuple fields 2024-04-11 00:10:10 -07:00
allocator.rs Add -Zuse-sync-unwind 2023-12-31 15:27:43 +08:00
asm.rs Add support for Arm64EC inline assembly 2024-04-10 10:06:44 -07:00
attributes.rs Use the Align type when parsing alignment attributes 2024-04-01 03:05:55 +01:00
base.rs compiler: replace cstr macro with c str literals in compiler and few other c str replacements 2023-12-03 14:54:09 +03:00
builder.rs Put PlaceValue into OperandValue::Ref, rather than 3 tuple fields 2024-04-11 00:10:10 -07:00
callee.rs Fix clippy::needless_borrow in the compiler 2023-11-21 20:13:40 +01:00
common.rs Add+Use mir::BinOp::Cmp 2024-03-23 23:23:41 -07:00
consts.rs Some comment nits 2024-03-12 08:51:20 +00:00
context.rs Pass value and valueLen to create a StringRef 2024-04-09 08:53:11 +02:00
declare.rs sanitizers: Create the rustc_sanitizers crate 2024-04-08 12:05:41 -07:00
errors.rs Rename IntoDiagnostic as Diagnostic. 2024-03-11 09:15:09 +11:00
intrinsic.rs Add load/store helpers that take PlaceValue 2024-04-11 00:10:10 -07:00
lib.rs compiler: use addr_of! 2024-02-24 18:53:48 +03:00
llvm_util.rs Register LLVM handlers for bad-alloc / OOM 2024-03-15 15:49:06 -07:00
mono_item.rs Some comment nits 2024-03-12 08:51:20 +00:00
type_.rs Remove my scalar_copy_backend_type optimization attempt 2024-04-09 08:51:32 -07:00
type_of.rs Remove my scalar_copy_backend_type optimization attempt 2024-04-09 08:51:32 -07:00
va_arg.rs Add arm64ec-pc-windows-msvc target 2024-03-06 17:49:37 -08:00
value.rs mv compiler to compiler/ 2020-08-30 18:45:07 +03:00