1+ use itertools:: Itertools as _;
12use rustc_abi:: { self as abi, FIRST_VARIANT } ;
23use rustc_middle:: ty:: adjustment:: PointerCoercion ;
34use rustc_middle:: ty:: layout:: { HasTyCtxt , HasTypingEnv , LayoutOf , TyAndLayout } ;
@@ -111,14 +112,13 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
111112 let size = bx. const_usize ( dest. layout . size . bytes ( ) ) ;
112113
113114 // Use llvm.memset.p0i8.* to initialize all same byte arrays
114- if let Some ( int) = bx. cx ( ) . const_to_opt_u128 ( v, false ) {
115- let bytes = & int. to_le_bytes ( ) [ ..cg_elem. layout . size . bytes_usize ( ) ] ;
116- let first = bytes[ 0 ] ;
117- if bytes[ 1 ..] . iter ( ) . all ( |& b| b == first) {
118- let fill = bx. cx ( ) . const_u8 ( first) ;
119- bx. memset ( start, fill, size, dest. val . align , MemFlags :: empty ( ) ) ;
120- return true ;
121- }
115+ if let Some ( int) = bx. cx ( ) . const_to_opt_u128 ( v, false )
116+ && let bytes = & int. to_le_bytes ( ) [ ..cg_elem. layout . size . bytes_usize ( ) ]
117+ && let Ok ( & byte) = bytes. iter ( ) . all_equal_value ( )
118+ {
119+ let fill = bx. cx ( ) . const_u8 ( byte) ;
120+ bx. memset ( start, fill, size, dest. val . align , MemFlags :: empty ( ) ) ;
121+ return true ;
122122 }
123123
124124 // Use llvm.memset.p0i8.* to initialize byte arrays
@@ -130,13 +130,10 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
130130 false
131131 } ;
132132
133- match cg_elem. val {
134- OperandValue :: Immediate ( v) => {
135- if try_init_all_same ( bx, v) {
136- return ;
137- }
138- }
139- _ => ( ) ,
133+ if let OperandValue :: Immediate ( v) = cg_elem. val
134+ && try_init_all_same ( bx, v)
135+ {
136+ return ;
140137 }
141138
142139 let count = self
0 commit comments