// This test checks that jumps generated by logical operators can be optimized away // compile-flags: -Copt-level=3 // only-64bit #![crate_type="lib"] pub struct Blueprint { pub fuel_tank_size: u32, pub payload: u32, pub wheel_diameter: u32, pub wheel_width: u32, pub storage: u32, } // && chains should not prevent SIMD optimizations for primitives impl PartialEq for Blueprint{ fn eq(&self, other: &Self)->bool{ // CHECK-NOT: call{{.*}}bcmp // CHECK-NOT: call{{.*}}memcmp // CHECK-NOT: br {{.*}} self.fuel_tank_size == other.fuel_tank_size && self.payload == other.payload && self.wheel_diameter == other.wheel_diameter && self.wheel_width == other.wheel_width && self.storage == other.storage } } #[derive(PartialEq)] pub struct Blueprint2 { pub fuel_tank_size: u32, pub payload: u32, pub wheel_diameter: u32, pub wheel_width: u32, pub storage: u32, } // Derived PartialEq should not generate jumps and should use SIMD #[no_mangle] pub fn partial_eq_should_not_jump(a: &Blueprint2, b:&Blueprint2)->bool{ // CHECK-NOT: call{{.*}}bcmp // CHECK-NOT: call{{.*}}memcmp // CHECK-NOT: br {{.*}} a==b }