about summary refs log tree commit diff
path: root/compiler/rustc_mir_transform/src/instcombine.rs
diff options
context:
space:
mode:
authorBen Kimock <kimockb@gmail.com>2023-02-19 15:50:00 -0500
committerBen Kimock <kimockb@gmail.com>2023-02-19 23:14:58 -0500
commit0e05280d75e43da007efd50ce49f4e1e8456bcbd (patch)
tree08cdddb70f0147fbb2a8e87adc88f8f1e01744ba /compiler/rustc_mir_transform/src/instcombine.rs
parenteebdfb55fce148676c24555505aebf648123b2de (diff)
downloadrust-0e05280d75e43da007efd50ce49f4e1e8456bcbd.tar.gz
rust-0e05280d75e43da007efd50ce49f4e1e8456bcbd.zip
Add an InstCombine for redundant casts
Diffstat (limited to 'compiler/rustc_mir_transform/src/instcombine.rs')
-rw-r--r--compiler/rustc_mir_transform/src/instcombine.rs9
1 files changed, 9 insertions, 0 deletions
diff --git a/compiler/rustc_mir_transform/src/instcombine.rs b/compiler/rustc_mir_transform/src/instcombine.rs
index 0534e688703..3896f0e57ea 100644
--- a/compiler/rustc_mir_transform/src/instcombine.rs
+++ b/compiler/rustc_mir_transform/src/instcombine.rs
@@ -30,6 +30,7 @@ impl<'tcx> MirPass<'tcx> for InstCombine {
                         ctx.combine_bool_cmp(&statement.source_info, rvalue);
                         ctx.combine_ref_deref(&statement.source_info, rvalue);
                         ctx.combine_len(&statement.source_info, rvalue);
+                        ctx.combine_cast(&statement.source_info, rvalue);
                     }
                     _ => {}
                 }
@@ -142,6 +143,14 @@ impl<'tcx> InstCombineContext<'tcx, '_> {
         }
     }
 
+    fn combine_cast(&self, _source_info: &SourceInfo, rvalue: &mut Rvalue<'tcx>) {
+        if let Rvalue::Cast(_kind, operand, ty) = rvalue {
+            if operand.ty(self.local_decls, self.tcx) == *ty {
+                *rvalue = Rvalue::Use(operand.clone());
+            }
+        }
+    }
+
     fn combine_primitive_clone(
         &self,
         terminator: &mut Terminator<'tcx>,