about summary refs log tree commit diff
path: root/compiler/rustc_codegen_ssa/src/mir
diff options
context:
space:
mode:
authorkadmin <julianknodt@gmail.com>2020-10-05 22:53:00 +0000
committerkadmin <julianknodt@gmail.com>2021-03-09 16:54:13 +0000
commit89f45ed9f3ce7366ae7153421d637efcb22a45b8 (patch)
tree56d6cb6111edb76012f1d660f935bcc1df776cb1 /compiler/rustc_codegen_ssa/src/mir
parent72c734d001a157e0fb38e1feebf6748189d3e1b9 (diff)
downloadrust-89f45ed9f3ce7366ae7153421d637efcb22a45b8.tar.gz
rust-89f45ed9f3ce7366ae7153421d637efcb22a45b8.zip
Update match branches
This updates all places where match branches check on StatementKind or UseContext.
This doesn't properly implement them, but adds TODOs where they are, and also adds some best
guesses to what they should be in some cases.
Diffstat (limited to 'compiler/rustc_codegen_ssa/src/mir')
-rw-r--r--compiler/rustc_codegen_ssa/src/mir/analyze.rs6
-rw-r--r--compiler/rustc_codegen_ssa/src/mir/statement.rs20
2 files changed, 14 insertions, 12 deletions
diff --git a/compiler/rustc_codegen_ssa/src/mir/analyze.rs b/compiler/rustc_codegen_ssa/src/mir/analyze.rs
index 5ad9f461472..289629d9215 100644
--- a/compiler/rustc_codegen_ssa/src/mir/analyze.rs
+++ b/compiler/rustc_codegen_ssa/src/mir/analyze.rs
@@ -293,8 +293,7 @@ impl<'mir, 'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> Visitor<'tcx>
                 | MutatingUseContext::AsmOutput
                 | MutatingUseContext::Borrow
                 | MutatingUseContext::AddressOf
-                | MutatingUseContext::Projection
-                | MutatingUseContext::CopyNonOverlapping,
+                | MutatingUseContext::Projection,
             )
             | PlaceContext::NonMutatingUse(
                 NonMutatingUseContext::Inspect
@@ -302,8 +301,7 @@ impl<'mir, 'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> Visitor<'tcx>
                 | NonMutatingUseContext::UniqueBorrow
                 | NonMutatingUseContext::ShallowBorrow
                 | NonMutatingUseContext::AddressOf
-                | NonMutatingUseContext::Projection
-                | NonMutatingUseContext::CopyNonOverlapping,
+                | NonMutatingUseContext::Projection,
             ) => {
                 self.not_ssa(local);
             }
diff --git a/compiler/rustc_codegen_ssa/src/mir/statement.rs b/compiler/rustc_codegen_ssa/src/mir/statement.rs
index b507cb0a823..1dafc8cd2c1 100644
--- a/compiler/rustc_codegen_ssa/src/mir/statement.rs
+++ b/compiler/rustc_codegen_ssa/src/mir/statement.rs
@@ -120,18 +120,22 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
                 ref dst,
                 ref size,
             }) => {
-                let dst_val = self.codegen_place(&mut bx, dst.as_ref());
-                let src_val = self.codegen_place(&mut bx, src.as_ref());
+                let dst_val = self.codegen_operand(&mut bx, dst);
+                let src_val = self.codegen_operand(&mut bx, src);
                 let size_val = self.codegen_operand(&mut bx, size);
                 let size = size_val.immediate_or_packed_pair(&mut bx);
+                let dst = dst_val.immediate_or_packed_pair(&mut bx);
+                let src = src_val.immediate_or_packed_pair(&mut bx);
+                use crate::MemFlags;
+                let flags =
+                    (!MemFlags::UNALIGNED) & (!MemFlags::VOLATILE) & (!MemFlags::NONTEMPORAL);
                 bx.memcpy(
-                    dst_val.llval,
-                    dst_val.align,
-                    src_val.llval,
-                    src_val.align,
+                    dst,
+                    dst_val.layout.layout.align.pref,
+                    src,
+                    src_val.layout.layout.align.pref,
                     size,
-                    // TODO probably want to have this change based on alignment above?
-                    crate::MemFlags::empty(),
+                    flags,
                 );
                 bx
             }