Skip to content

Commit

Permalink
Switch to using TargetFrontendConfig in the frontend memory tests
Browse files Browse the repository at this point in the history
Commit 7d36fd9 avoided these
x86-specific tests altogether. This change avoids any dependency on x86
entirely by specifying a frontend configuration (SystemV + U64); this is
enough information for the `FunctionBuilder` to correctly generate the
syscalls.
  • Loading branch information
abrown committed Jun 3, 2021
1 parent 88b6e88 commit e25bf36
Showing 1 changed file with 33 additions and 94 deletions.
127 changes: 33 additions & 94 deletions cranelift/frontend/src/frontend.rs
Original file line number Diff line number Diff line change
Expand Up @@ -854,9 +854,10 @@ mod tests {
use cranelift_codegen::ir::{
AbiParam, ExternalName, Function, InstBuilder, MemFlags, Signature,
};
use cranelift_codegen::isa::CallConv;
use cranelift_codegen::isa::{CallConv, TargetFrontendConfig};
use cranelift_codegen::settings;
use cranelift_codegen::verifier::verify_function;
use target_lexicon::PointerWidth;

fn sample_function(lazy_seal: bool) {
let mut sig = Signature::new(CallConv::SystemV);
Expand Down Expand Up @@ -968,24 +969,18 @@ mod tests {
sample_function(true)
}

/// Helper function to construct a fixed frontend configuration.
fn systemv_frontend_config() -> TargetFrontendConfig {
TargetFrontendConfig {
default_call_conv: CallConv::SystemV,
pointer_width: PointerWidth::U64,
}
}

#[test]
#[cfg_attr(not(target_arch = "x86_64"), ignore)]
fn memcpy() {
use core::str::FromStr;
use cranelift_codegen::{isa, settings};

let shared_builder = settings::builder();
let shared_flags = settings::Flags::new(shared_builder);

let triple =
::target_lexicon::Triple::from_str("x86_64").expect("Couldn't create x86_64 triple");

let target = isa::lookup(triple)
.ok()
.map(|b| b.finish(shared_flags))
.expect("This test requires x86_64 support.");

let mut sig = Signature::new(target.default_call_conv());
let frontend_config = systemv_frontend_config();
let mut sig = Signature::new(frontend_config.default_call_conv);
sig.returns.push(AbiParam::new(I32));

let mut fn_ctx = FunctionBuilderContext::new();
Expand All @@ -997,16 +992,16 @@ mod tests {
let x = Variable::new(0);
let y = Variable::new(1);
let z = Variable::new(2);
builder.declare_var(x, target.pointer_type());
builder.declare_var(y, target.pointer_type());
builder.declare_var(x, frontend_config.pointer_type());
builder.declare_var(y, frontend_config.pointer_type());
builder.declare_var(z, I32);
builder.append_block_params_for_function_params(block0);
builder.switch_to_block(block0);

let src = builder.use_var(x);
let dest = builder.use_var(y);
let size = builder.use_var(y);
builder.call_memcpy(target.frontend_config(), dest, src, size);
builder.call_memcpy(frontend_config, dest, src, size);
builder.ins().return_(&[size]);

builder.seal_all_blocks();
Expand All @@ -1032,23 +1027,9 @@ block0:
}

#[test]
#[cfg_attr(not(target_arch = "x86_64"), ignore)]
fn small_memcpy() {
use core::str::FromStr;
use cranelift_codegen::{isa, settings};

let shared_builder = settings::builder();
let shared_flags = settings::Flags::new(shared_builder);

let triple =
::target_lexicon::Triple::from_str("x86_64").expect("Couldn't create x86_64 triple");

let target = isa::lookup(triple)
.ok()
.map(|b| b.finish(shared_flags))
.expect("This test requires x86_64 support.");

let mut sig = Signature::new(target.default_call_conv());
let frontend_config = systemv_frontend_config();
let mut sig = Signature::new(frontend_config.default_call_conv);
sig.returns.push(AbiParam::new(I32));

let mut fn_ctx = FunctionBuilderContext::new();
Expand All @@ -1059,16 +1040,16 @@ block0:
let block0 = builder.create_block();
let x = Variable::new(0);
let y = Variable::new(16);
builder.declare_var(x, target.pointer_type());
builder.declare_var(y, target.pointer_type());
builder.declare_var(x, frontend_config.pointer_type());
builder.declare_var(y, frontend_config.pointer_type());
builder.append_block_params_for_function_params(block0);
builder.switch_to_block(block0);

let src = builder.use_var(x);
let dest = builder.use_var(y);
let size = 8;
builder.emit_small_memory_copy(
target.frontend_config(),
frontend_config,
dest,
src,
size,
Expand Down Expand Up @@ -1100,23 +1081,9 @@ block0:
}

#[test]
#[cfg_attr(not(target_arch = "x86_64"), ignore)]
fn not_so_small_memcpy() {
use core::str::FromStr;
use cranelift_codegen::{isa, settings};

let shared_builder = settings::builder();
let shared_flags = settings::Flags::new(shared_builder);

let triple =
::target_lexicon::Triple::from_str("x86_64").expect("Couldn't create x86_64 triple");

let target = isa::lookup(triple)
.ok()
.map(|b| b.finish(shared_flags))
.expect("This test requires x86_64 support.");

let mut sig = Signature::new(target.default_call_conv());
let frontend_config = systemv_frontend_config();
let mut sig = Signature::new(frontend_config.default_call_conv);
sig.returns.push(AbiParam::new(I32));

let mut fn_ctx = FunctionBuilderContext::new();
Expand All @@ -1127,16 +1094,16 @@ block0:
let block0 = builder.create_block();
let x = Variable::new(0);
let y = Variable::new(16);
builder.declare_var(x, target.pointer_type());
builder.declare_var(y, target.pointer_type());
builder.declare_var(x, frontend_config.pointer_type());
builder.declare_var(y, frontend_config.pointer_type());
builder.append_block_params_for_function_params(block0);
builder.switch_to_block(block0);

let src = builder.use_var(x);
let dest = builder.use_var(y);
let size = 8192;
builder.emit_small_memory_copy(
target.frontend_config(),
frontend_config,
dest,
src,
size,
Expand Down Expand Up @@ -1171,23 +1138,9 @@ block0:
}

#[test]
#[cfg_attr(not(target_arch = "x86_64"), ignore)]
fn small_memset() {
use core::str::FromStr;
use cranelift_codegen::{isa, settings};

let shared_builder = settings::builder();
let shared_flags = settings::Flags::new(shared_builder);

let triple =
::target_lexicon::Triple::from_str("x86_64").expect("Couldn't create x86_64 triple");

let target = isa::lookup(triple)
.ok()
.map(|b| b.finish(shared_flags))
.expect("This test requires x86_64 support.");

let mut sig = Signature::new(target.default_call_conv());
let frontend_config = systemv_frontend_config();
let mut sig = Signature::new(frontend_config.default_call_conv);
sig.returns.push(AbiParam::new(I32));

let mut fn_ctx = FunctionBuilderContext::new();
Expand All @@ -1197,13 +1150,13 @@ block0:

let block0 = builder.create_block();
let y = Variable::new(16);
builder.declare_var(y, target.pointer_type());
builder.declare_var(y, frontend_config.pointer_type());
builder.append_block_params_for_function_params(block0);
builder.switch_to_block(block0);

let dest = builder.use_var(y);
let size = 8;
builder.emit_small_memset(target.frontend_config(), dest, 1, size, 8, MemFlags::new());
builder.emit_small_memset(frontend_config, dest, 1, size, 8, MemFlags::new());
builder.ins().return_(&[dest]);

builder.seal_all_blocks();
Expand All @@ -1225,23 +1178,9 @@ block0:
}

#[test]
#[cfg_attr(not(target_arch = "x86_64"), ignore)]
fn not_so_small_memset() {
use core::str::FromStr;
use cranelift_codegen::{isa, settings};

let shared_builder = settings::builder();
let shared_flags = settings::Flags::new(shared_builder);

let triple =
::target_lexicon::Triple::from_str("x86_64").expect("Couldn't create x86_64 triple");

let target = isa::lookup(triple)
.ok()
.map(|b| b.finish(shared_flags))
.expect("This test requires x86_64 support.");

let mut sig = Signature::new(target.default_call_conv());
let frontend_config = systemv_frontend_config();
let mut sig = Signature::new(frontend_config.default_call_conv);
sig.returns.push(AbiParam::new(I32));

let mut fn_ctx = FunctionBuilderContext::new();
Expand All @@ -1251,13 +1190,13 @@ block0:

let block0 = builder.create_block();
let y = Variable::new(16);
builder.declare_var(y, target.pointer_type());
builder.declare_var(y, frontend_config.pointer_type());
builder.append_block_params_for_function_params(block0);
builder.switch_to_block(block0);

let dest = builder.use_var(y);
let size = 8192;
builder.emit_small_memset(target.frontend_config(), dest, 1, size, 8, MemFlags::new());
builder.emit_small_memset(frontend_config, dest, 1, size, 8, MemFlags::new());
builder.ins().return_(&[dest]);

builder.seal_all_blocks();
Expand Down

0 comments on commit e25bf36

Please sign in to comment.