1
Fork 0

rustc_codegen_ssa: derive copy and clone for various enums

This commit is contained in:
Tomasz Miąsko 2022-05-24 00:00:00 +00:00
parent f4c92cc4d1
commit ef83e689a8
2 changed files with 7 additions and 19 deletions

View file

@ -61,23 +61,6 @@ enum ExtremumOperation {
Min, Min,
} }
trait EnumClone {
fn clone(&self) -> Self;
}
impl EnumClone for AtomicOrdering {
fn clone(&self) -> Self {
match *self {
AtomicOrdering::Unordered => AtomicOrdering::Unordered,
AtomicOrdering::Relaxed => AtomicOrdering::Relaxed,
AtomicOrdering::Acquire => AtomicOrdering::Acquire,
AtomicOrdering::Release => AtomicOrdering::Release,
AtomicOrdering::AcquireRelease => AtomicOrdering::AcquireRelease,
AtomicOrdering::SequentiallyConsistent => AtomicOrdering::SequentiallyConsistent,
}
}
}
pub struct Builder<'a: 'gcc, 'gcc, 'tcx> { pub struct Builder<'a: 'gcc, 'gcc, 'tcx> {
pub cx: &'a CodegenCx<'gcc, 'tcx>, pub cx: &'a CodegenCx<'gcc, 'tcx>,
pub block: Block<'gcc>, pub block: Block<'gcc>,
@ -102,9 +85,9 @@ impl<'a, 'gcc, 'tcx> Builder<'a, 'gcc, 'tcx> {
match order { match order {
// TODO(antoyo): does this make sense? // TODO(antoyo): does this make sense?
AtomicOrdering::AcquireRelease | AtomicOrdering::Release => AtomicOrdering::Acquire, AtomicOrdering::AcquireRelease | AtomicOrdering::Release => AtomicOrdering::Acquire,
_ => order.clone(), _ => order,
}; };
let previous_value = self.atomic_load(dst.get_type(), dst, load_ordering.clone(), Size::from_bytes(size)); let previous_value = self.atomic_load(dst.get_type(), dst, load_ordering, Size::from_bytes(size));
let previous_var = func.new_local(None, previous_value.get_type(), "previous_value"); let previous_var = func.new_local(None, previous_value.get_type(), "previous_value");
let return_value = func.new_local(None, previous_value.get_type(), "return_value"); let return_value = func.new_local(None, previous_value.get_type(), "return_value");
self.llbb().add_assignment(None, previous_var, previous_value); self.llbb().add_assignment(None, previous_var, previous_value);

View file

@ -11,6 +11,7 @@ use rustc_span::Span;
use crate::base; use crate::base;
use crate::traits::*; use crate::traits::*;
#[derive(Copy, Clone)]
pub enum IntPredicate { pub enum IntPredicate {
IntEQ, IntEQ,
IntNE, IntNE,
@ -24,6 +25,7 @@ pub enum IntPredicate {
IntSLE, IntSLE,
} }
#[derive(Copy, Clone)]
pub enum RealPredicate { pub enum RealPredicate {
RealPredicateFalse, RealPredicateFalse,
RealOEQ, RealOEQ,
@ -43,6 +45,7 @@ pub enum RealPredicate {
RealPredicateTrue, RealPredicateTrue,
} }
#[derive(Copy, Clone)]
pub enum AtomicRmwBinOp { pub enum AtomicRmwBinOp {
AtomicXchg, AtomicXchg,
AtomicAdd, AtomicAdd,
@ -57,6 +60,7 @@ pub enum AtomicRmwBinOp {
AtomicUMin, AtomicUMin,
} }
#[derive(Copy, Clone)]
pub enum AtomicOrdering { pub enum AtomicOrdering {
Unordered, Unordered,
Relaxed, Relaxed,
@ -66,6 +70,7 @@ pub enum AtomicOrdering {
SequentiallyConsistent, SequentiallyConsistent,
} }
#[derive(Copy, Clone)]
pub enum SynchronizationScope { pub enum SynchronizationScope {
SingleThread, SingleThread,
CrossThread, CrossThread,