cranelift/reader/src/parser.rs: fn parse_inst_resuts: produce the results as a
SmallVec<[Value; 1]>, not as a Vec<Value>. This isn't a useful change for any non-developer use of Cranelift, but it does significantly reduce the amount of allocation "noise" seen when tuning the new backend pipeline as driven by clif-util reading .clif files. In one case the number of malloc calls declined by about 20% with this change.
This commit is contained in:
committed by
julian-seward1
parent
ee2f861fdd
commit
94190d5724
1
Cargo.lock
generated
1
Cargo.lock
generated
@@ -489,6 +489,7 @@ name = "cranelift-reader"
|
|||||||
version = "0.63.0"
|
version = "0.63.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cranelift-codegen",
|
"cranelift-codegen",
|
||||||
|
"smallvec",
|
||||||
"target-lexicon",
|
"target-lexicon",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ edition = "2018"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
cranelift-codegen = { path = "../codegen", version = "0.63.0" }
|
cranelift-codegen = { path = "../codegen", version = "0.63.0" }
|
||||||
|
smallvec = "1.0.0"
|
||||||
target-lexicon = "0.10"
|
target-lexicon = "0.10"
|
||||||
thiserror = "1.0.15"
|
thiserror = "1.0.15"
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ use cranelift_codegen::ir::{
|
|||||||
use cranelift_codegen::isa::{self, CallConv, Encoding, RegUnit, TargetIsa};
|
use cranelift_codegen::isa::{self, CallConv, Encoding, RegUnit, TargetIsa};
|
||||||
use cranelift_codegen::packed_option::ReservedValue;
|
use cranelift_codegen::packed_option::ReservedValue;
|
||||||
use cranelift_codegen::{settings, timing};
|
use cranelift_codegen::{settings, timing};
|
||||||
|
use smallvec::SmallVec;
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use std::{u16, u32};
|
use std::{u16, u32};
|
||||||
@@ -2223,9 +2224,9 @@ impl<'a> Parser<'a> {
|
|||||||
//
|
//
|
||||||
// inst-results ::= Value(v) { "," Value(v) }
|
// inst-results ::= Value(v) { "," Value(v) }
|
||||||
//
|
//
|
||||||
fn parse_inst_results(&mut self) -> ParseResult<Vec<Value>> {
|
fn parse_inst_results(&mut self) -> ParseResult<SmallVec<[Value; 1]>> {
|
||||||
// Result value numbers.
|
// Result value numbers.
|
||||||
let mut results = Vec::new();
|
let mut results = SmallVec::new();
|
||||||
|
|
||||||
// instruction ::= * [inst-results "="] Opcode(opc) ["." Type] ...
|
// instruction ::= * [inst-results "="] Opcode(opc) ["." Type] ...
|
||||||
// inst-results ::= * Value(v) { "," Value(v) }
|
// inst-results ::= * Value(v) { "," Value(v) }
|
||||||
|
|||||||
Reference in New Issue
Block a user