MCPcopy Create free account
hub / github.com/bytecodealliance/wasmtime / insert_load_store

Function insert_load_store

cranelift/fuzzgen/src/function_generator.rs:273–331  ·  view source on GitHub ↗
(
    fgen: &mut FunctionGenerator,
    builder: &mut FunctionBuilder,
    opcode: Opcode,
    args: &[Type],
    rets: &[Type],
)

Source from the content-addressed store, hash-verified

271}
272
273fn insert_load_store(
274 fgen: &mut FunctionGenerator,
275 builder: &mut FunctionBuilder,
276 opcode: Opcode,
277 args: &[Type],
278 rets: &[Type],
279) -> Result<()> {
280 if opcode == Opcode::Bitcast {
281 return insert_bitcast(fgen, builder, args, rets);
282 }
283
284 let ctrl_type = *rets.first().or(args.first()).unwrap();
285 let type_size = ctrl_type.bytes();
286
287 let is_atomic = [Opcode::AtomicLoad, Opcode::AtomicStore].contains(&opcode);
288 let (address, flags_data, offset) =
289 fgen.generate_address_and_memflags(builder, type_size, is_atomic)?;
290
291 // The variable being loaded or stored into
292 let var = fgen.get_variable_of_type(ctrl_type)?;
293
294 let flags = builder.func.dfg.mem_flags.insert(flags_data).unwrap();
295
296 match opcode.format() {
297 InstructionFormat::LoadNoOffset => {
298 let (inst, dfg) = builder
299 .ins()
300 .LoadNoOffset(opcode, ctrl_type, flags, address);
301
302 let new_val = dfg.first_result(inst);
303 builder.def_var(var, new_val);
304 }
305 InstructionFormat::StoreNoOffset => {
306 let val = builder.use_var(var);
307
308 builder
309 .ins()
310 .StoreNoOffset(opcode, ctrl_type, flags, val, address);
311 }
312 InstructionFormat::Store => {
313 let val = builder.use_var(var);
314
315 builder
316 .ins()
317 .Store(opcode, ctrl_type, flags, offset, val, address);
318 }
319 InstructionFormat::Load => {
320 let (inst, dfg) = builder
321 .ins()
322 .Load(opcode, ctrl_type, flags, offset, address);
323
324 let new_val = dfg.first_result(inst);
325 builder.def_var(var, new_val);
326 }
327 _ => unimplemented!(),
328 }
329
330 Ok(())

Callers

nothing calls this directly

Calls 15

insert_bitcastFunction · 0.85
OkFunction · 0.85
get_variable_of_typeMethod · 0.80
first_resultMethod · 0.80
StoreMethod · 0.80
unwrapMethod · 0.45
orMethod · 0.45
firstMethod · 0.45
bytesMethod · 0.45
containsMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected