Merge pull request #2746 from bjorn3/emit_small_mem_custom_memflags
Allow passing arbitrary MemFlags to emit_small_mem{cpy,move}
This commit is contained in:
@@ -640,6 +640,7 @@ impl<'a> FunctionBuilder<'a> {
|
|||||||
dest_align: u8,
|
dest_align: u8,
|
||||||
src_align: u8,
|
src_align: u8,
|
||||||
non_overlapping: bool,
|
non_overlapping: bool,
|
||||||
|
mut flags: MemFlags,
|
||||||
) {
|
) {
|
||||||
// Currently the result of guess work, not actual profiling.
|
// Currently the result of guess work, not actual profiling.
|
||||||
const THRESHOLD: u64 = 4;
|
const THRESHOLD: u64 = 4;
|
||||||
@@ -676,7 +677,6 @@ impl<'a> FunctionBuilder<'a> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut flags = MemFlags::new();
|
|
||||||
flags.set_aligned();
|
flags.set_aligned();
|
||||||
|
|
||||||
// Load all of the memory first. This is necessary in case `dest` overlaps.
|
// Load all of the memory first. This is necessary in case `dest` overlaps.
|
||||||
@@ -732,6 +732,7 @@ impl<'a> FunctionBuilder<'a> {
|
|||||||
ch: u8,
|
ch: u8,
|
||||||
size: u64,
|
size: u64,
|
||||||
buffer_align: u8,
|
buffer_align: u8,
|
||||||
|
mut flags: MemFlags,
|
||||||
) {
|
) {
|
||||||
// Currently the result of guess work, not actual profiling.
|
// Currently the result of guess work, not actual profiling.
|
||||||
const THRESHOLD: u64 = 4;
|
const THRESHOLD: u64 = 4;
|
||||||
@@ -763,7 +764,6 @@ impl<'a> FunctionBuilder<'a> {
|
|||||||
let size = self.ins().iconst(config.pointer_type(), size as i64);
|
let size = self.ins().iconst(config.pointer_type(), size as i64);
|
||||||
self.call_memset(config, buffer, ch, size);
|
self.call_memset(config, buffer, ch, size);
|
||||||
} else {
|
} else {
|
||||||
let mut flags = MemFlags::new();
|
|
||||||
flags.set_aligned();
|
flags.set_aligned();
|
||||||
|
|
||||||
let ch = u64::from(ch);
|
let ch = u64::from(ch);
|
||||||
@@ -851,7 +851,9 @@ mod tests {
|
|||||||
use alloc::string::ToString;
|
use alloc::string::ToString;
|
||||||
use cranelift_codegen::entity::EntityRef;
|
use cranelift_codegen::entity::EntityRef;
|
||||||
use cranelift_codegen::ir::types::*;
|
use cranelift_codegen::ir::types::*;
|
||||||
use cranelift_codegen::ir::{AbiParam, ExternalName, Function, InstBuilder, Signature};
|
use cranelift_codegen::ir::{
|
||||||
|
AbiParam, ExternalName, Function, InstBuilder, MemFlags, Signature,
|
||||||
|
};
|
||||||
use cranelift_codegen::isa::CallConv;
|
use cranelift_codegen::isa::CallConv;
|
||||||
use cranelift_codegen::settings;
|
use cranelift_codegen::settings;
|
||||||
use cranelift_codegen::verifier::verify_function;
|
use cranelift_codegen::verifier::verify_function;
|
||||||
@@ -1063,7 +1065,16 @@ block0:
|
|||||||
let src = builder.use_var(x);
|
let src = builder.use_var(x);
|
||||||
let dest = builder.use_var(y);
|
let dest = builder.use_var(y);
|
||||||
let size = 8;
|
let size = 8;
|
||||||
builder.emit_small_memory_copy(target.frontend_config(), dest, src, size, 8, 8, true);
|
builder.emit_small_memory_copy(
|
||||||
|
target.frontend_config(),
|
||||||
|
dest,
|
||||||
|
src,
|
||||||
|
size,
|
||||||
|
8,
|
||||||
|
8,
|
||||||
|
true,
|
||||||
|
MemFlags::new(),
|
||||||
|
);
|
||||||
builder.ins().return_(&[dest]);
|
builder.ins().return_(&[dest]);
|
||||||
|
|
||||||
builder.seal_all_blocks();
|
builder.seal_all_blocks();
|
||||||
@@ -1121,7 +1132,16 @@ block0:
|
|||||||
let src = builder.use_var(x);
|
let src = builder.use_var(x);
|
||||||
let dest = builder.use_var(y);
|
let dest = builder.use_var(y);
|
||||||
let size = 8192;
|
let size = 8192;
|
||||||
builder.emit_small_memory_copy(target.frontend_config(), dest, src, size, 8, 8, true);
|
builder.emit_small_memory_copy(
|
||||||
|
target.frontend_config(),
|
||||||
|
dest,
|
||||||
|
src,
|
||||||
|
size,
|
||||||
|
8,
|
||||||
|
8,
|
||||||
|
true,
|
||||||
|
MemFlags::new(),
|
||||||
|
);
|
||||||
builder.ins().return_(&[dest]);
|
builder.ins().return_(&[dest]);
|
||||||
|
|
||||||
builder.seal_all_blocks();
|
builder.seal_all_blocks();
|
||||||
@@ -1179,7 +1199,7 @@ block0:
|
|||||||
|
|
||||||
let dest = builder.use_var(y);
|
let dest = builder.use_var(y);
|
||||||
let size = 8;
|
let size = 8;
|
||||||
builder.emit_small_memset(target.frontend_config(), dest, 1, size, 8);
|
builder.emit_small_memset(target.frontend_config(), dest, 1, size, 8, MemFlags::new());
|
||||||
builder.ins().return_(&[dest]);
|
builder.ins().return_(&[dest]);
|
||||||
|
|
||||||
builder.seal_all_blocks();
|
builder.seal_all_blocks();
|
||||||
@@ -1232,7 +1252,7 @@ block0:
|
|||||||
|
|
||||||
let dest = builder.use_var(y);
|
let dest = builder.use_var(y);
|
||||||
let size = 8192;
|
let size = 8192;
|
||||||
builder.emit_small_memset(target.frontend_config(), dest, 1, size, 8);
|
builder.emit_small_memset(target.frontend_config(), dest, 1, size, 8, MemFlags::new());
|
||||||
builder.ins().return_(&[dest]);
|
builder.ins().return_(&[dest]);
|
||||||
|
|
||||||
builder.seal_all_blocks();
|
builder.seal_all_blocks();
|
||||||
|
|||||||
Reference in New Issue
Block a user