(
&mut self,
place: PlaceRef<'tcx, Self::Value>,
)
| 1156 | } |
| 1157 | |
| 1158 | fn load_operand( |
| 1159 | &mut self, |
| 1160 | place: PlaceRef<'tcx, Self::Value>, |
| 1161 | ) -> OperandRef<'tcx, Self::Value> { |
| 1162 | if place.layout.is_zst() { |
| 1163 | return OperandRef::new_zst(self, place.layout); |
| 1164 | } |
| 1165 | |
| 1166 | let val = if let Some(llextra) = place.llextra { |
| 1167 | OperandValue::Ref(place.llval, Some(llextra), place.align) |
| 1168 | } else if self.cx.is_backend_immediate(place.layout) { |
| 1169 | let llval = self.load( |
| 1170 | place.layout.spirv_type(self.span(), self), |
| 1171 | place.llval, |
| 1172 | place.align, |
| 1173 | ); |
| 1174 | OperandValue::Immediate(self.to_immediate(llval, place.layout)) |
| 1175 | } else if let Abi::ScalarPair(a, b) = place.layout.abi { |
| 1176 | let b_offset = a |
| 1177 | .primitive() |
| 1178 | .size(self) |
| 1179 | .align_to(b.primitive().align(self).abi); |
| 1180 | |
| 1181 | let pair_ty = place.layout.spirv_type(self.span(), self); |
| 1182 | let mut load = |i, scalar: Scalar, align| { |
| 1183 | let llptr = self.struct_gep(pair_ty, place.llval, i as u64); |
| 1184 | let load = self.load( |
| 1185 | self.scalar_pair_element_backend_type(place.layout, i, false), |
| 1186 | llptr, |
| 1187 | align, |
| 1188 | ); |
| 1189 | self.to_immediate_scalar(load, scalar) |
| 1190 | }; |
| 1191 | |
| 1192 | OperandValue::Pair( |
| 1193 | load(0, a, place.align), |
| 1194 | load(1, b, place.align.restrict_for_offset(b_offset)), |
| 1195 | ) |
| 1196 | } else { |
| 1197 | OperandValue::Ref(place.llval, None, place.align) |
| 1198 | }; |
| 1199 | OperandRef { |
| 1200 | val, |
| 1201 | layout: place.layout, |
| 1202 | } |
| 1203 | } |
| 1204 | |
| 1205 | /// Called for `Rvalue::Repeat` when the elem is neither a ZST nor optimizable using memset. |
| 1206 | fn write_operand_repeatedly( |
nothing calls this directly
no test coverage detected