Use complex load-extend instructions in optimize_complex_addresses; fixes #1186

This commit is contained in:
Andrew Brown
2020-04-30 10:22:25 -07:00
parent a312506262
commit 49622bde58
2 changed files with 37 additions and 6 deletions

View File

@@ -271,6 +271,42 @@ fn optimize_complex_addresses(pos: &mut EncCursor, inst: Inst, isa: &dyn TargetI
.replace(inst) .replace(inst)
.sload32_complex(info.flags, &args, info.offset); .sload32_complex(info.flags, &args, info.offset);
} }
Opcode::Uload8x8 => {
pos.func
.dfg
.replace(inst)
.uload8x8_complex(info.flags, &args, info.offset);
}
Opcode::Sload8x8 => {
pos.func
.dfg
.replace(inst)
.sload8x8_complex(info.flags, &args, info.offset);
}
Opcode::Uload16x4 => {
pos.func
.dfg
.replace(inst)
.uload16x4_complex(info.flags, &args, info.offset);
}
Opcode::Sload16x4 => {
pos.func
.dfg
.replace(inst)
.sload16x4_complex(info.flags, &args, info.offset);
}
Opcode::Uload32x2 => {
pos.func
.dfg
.replace(inst)
.uload32x2_complex(info.flags, &args, info.offset);
}
Opcode::Sload32x2 => {
pos.func
.dfg
.replace(inst)
.sload32x2_complex(info.flags, &args, info.offset);
}
Opcode::Store => { Opcode::Store => {
pos.func.dfg.replace(inst).store_complex( pos.func.dfg.replace(inst).store_complex(
info.flags, info.flags,

View File

@@ -1,5 +1,5 @@
use std::path::Path; use std::path::Path;
use wasmtime::{Config, Engine, OptLevel, Store, Strategy}; use wasmtime::{Config, Engine, Store, Strategy};
use wasmtime_wast::WastContext; use wasmtime_wast::WastContext;
include!(concat!(env!("OUT_DIR"), "/wast_testsuite_tests.rs")); include!(concat!(env!("OUT_DIR"), "/wast_testsuite_tests.rs"));
@@ -28,11 +28,6 @@ fn run_wast(wast: &str, strategy: Strategy) -> anyhow::Result<()> {
.strategy(strategy)? .strategy(strategy)?
.cranelift_debug_verifier(true); .cranelift_debug_verifier(true);
// FIXME: https://github.com/bytecodealliance/wasmtime/issues/1186
if simd {
cfg.cranelift_opt_level(OptLevel::None);
}
let store = Store::new(&Engine::new(&cfg)); let store = Store::new(&Engine::new(&cfg));
let mut wast_context = WastContext::new(store); let mut wast_context = WastContext::new(store);
wast_context.register_spectest()?; wast_context.register_spectest()?;