MCPcopy Create free account
hub / github.com/Rust-GPU/rust-gpu / load_operand

Method load_operand

crates/rustc_codegen_spirv/src/builder/builder_methods.rs:1158–1203  ·  view source on GitHub ↗
(
        &mut self,
        place: PlaceRef<'tcx, Self::Value>,
    )

Source from the content-addressed store, hash-verified

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(

Callers

nothing calls this directly

Calls 8

is_backend_immediateMethod · 0.80
spirv_typeMethod · 0.80
spanMethod · 0.80
struct_gepMethod · 0.80
to_immediate_scalarMethod · 0.80
loadFunction · 0.50
loadMethod · 0.45

Tested by

no test coverage detected