cranelift: remove load_complex and store_complex (#3976)
This change removes all variants of `load*_complex` and `store*_complex` from Cranelift; this is a breaking change to the instructions exposed by CLIF. The complete list of instructions removed is: `load_complex`, `store_complex`, `uload8_complex`, `sload8_complex`, `istore8_complex`, `sload8_complex`, `uload16_complex`, `sload16_complex`, `istore16_complex`, `uload32_complex`, `sload32_complex`, `istore32_complex`, `uload8x8_complex`, `sload8x8_complex`, `sload16x4_complex`, `uload16x4_complex`, `uload32x2_complex`, `sload32x2_complex`. The rationale for this removal is that the Cranelift backend now has the ability to pattern-match multiple upstream additions in order to calculate the address to access. Previously, this was not possible so the `*_complex` instructions were needed. Over time, these instructions have fallen out of use in this repository, making the additional overhead of maintaining them a chore.
This commit is contained in:
@@ -2246,23 +2246,6 @@ impl<'a> Parser<'a> {
|
||||
Ok(args)
|
||||
}
|
||||
|
||||
fn parse_value_sequence(&mut self) -> ParseResult<VariableArgs> {
|
||||
let mut args = VariableArgs::new();
|
||||
|
||||
if let Some(Token::Value(v)) = self.token() {
|
||||
args.push(v);
|
||||
self.consume();
|
||||
} else {
|
||||
return Ok(args);
|
||||
}
|
||||
|
||||
while self.optional(Token::Plus) {
|
||||
args.push(self.match_value("expected value in argument list")?);
|
||||
}
|
||||
|
||||
Ok(args)
|
||||
}
|
||||
|
||||
// Parse an optional value list enclosed in parentheses.
|
||||
fn parse_opt_value_list(&mut self) -> ParseResult<VariableArgs> {
|
||||
if !self.optional(Token::LPar) {
|
||||
@@ -2880,17 +2863,6 @@ impl<'a> Parser<'a> {
|
||||
offset,
|
||||
}
|
||||
}
|
||||
InstructionFormat::LoadComplex => {
|
||||
let flags = self.optional_memflags();
|
||||
let args = self.parse_value_sequence()?;
|
||||
let offset = self.optional_offset32()?;
|
||||
InstructionData::LoadComplex {
|
||||
opcode,
|
||||
flags,
|
||||
args: args.into_value_list(&[], &mut ctx.function.dfg.value_lists),
|
||||
offset,
|
||||
}
|
||||
}
|
||||
InstructionFormat::Store => {
|
||||
let flags = self.optional_memflags();
|
||||
let arg = self.match_value("expected SSA value operand")?;
|
||||
@@ -2904,20 +2876,6 @@ impl<'a> Parser<'a> {
|
||||
offset,
|
||||
}
|
||||
}
|
||||
|
||||
InstructionFormat::StoreComplex => {
|
||||
let flags = self.optional_memflags();
|
||||
let src = self.match_value("expected SSA value operand")?;
|
||||
self.match_token(Token::Comma, "expected ',' between operands")?;
|
||||
let args = self.parse_value_sequence()?;
|
||||
let offset = self.optional_offset32()?;
|
||||
InstructionData::StoreComplex {
|
||||
opcode,
|
||||
flags,
|
||||
args: args.into_value_list(&[src], &mut ctx.function.dfg.value_lists),
|
||||
offset,
|
||||
}
|
||||
}
|
||||
InstructionFormat::Trap => {
|
||||
let code = self.match_enum("expected trap code")?;
|
||||
InstructionData::Trap { opcode, code }
|
||||
|
||||
Reference in New Issue
Block a user