Use opt_level instead of is_compressed for encoding optimizations.
Choosing smaller instruction encodings on eg. x86 is an optimization, rather than a useful discrete setting. Use "is_compressed" only for ISAs that have an explicit compression feature that users of the output may to be aware of, such as RISC-V's RVC or ARM's Thumb-2.
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
; binary emission of 32-bit code.
|
; binary emission of 32-bit code.
|
||||||
test binemit
|
test binemit
|
||||||
set is_compressed
|
set opt_level=best
|
||||||
set allones_funcaddrs
|
set allones_funcaddrs
|
||||||
isa x86 haswell
|
isa x86 haswell
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
; binary emission of 64-bit code.
|
; binary emission of 64-bit code.
|
||||||
test binemit
|
test binemit
|
||||||
set is_64bit
|
set is_64bit
|
||||||
set is_compressed
|
set opt_level=best
|
||||||
set allones_funcaddrs
|
set allones_funcaddrs
|
||||||
isa x86 haswell
|
isa x86 haswell
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
|
|
||||||
test binemit
|
test binemit
|
||||||
set is_64bit
|
set is_64bit
|
||||||
set is_compressed
|
set opt_level=best
|
||||||
isa x86 baseline
|
isa x86 baseline
|
||||||
|
|
||||||
; The binary encodings can be verified with the command:
|
; The binary encodings can be verified with the command:
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
; binary emission of x86-32 code.
|
; binary emission of x86-32 code.
|
||||||
test binemit
|
test binemit
|
||||||
set is_compressed
|
set opt_level=best
|
||||||
isa x86 haswell
|
isa x86 haswell
|
||||||
|
|
||||||
; The binary encodings can be verified with the command:
|
; The binary encodings can be verified with the command:
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
; Binary emission of 64-bit floating point code.
|
; Binary emission of 64-bit floating point code.
|
||||||
test binemit
|
test binemit
|
||||||
set is_64bit
|
set is_64bit
|
||||||
set is_compressed
|
set opt_level=best
|
||||||
isa x86 haswell
|
isa x86 haswell
|
||||||
|
|
||||||
; The binary encodings can be verified with the command:
|
; The binary encodings can be verified with the command:
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
; binary emission of 64-bit code.
|
; binary emission of 64-bit code.
|
||||||
test binemit
|
test binemit
|
||||||
set is_64bit
|
set is_64bit
|
||||||
set is_compressed
|
set opt_level=best
|
||||||
set is_pic
|
set is_pic
|
||||||
isa x86 haswell
|
isa x86 haswell
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
; binary emission of x86-64 code.
|
; binary emission of x86-64 code.
|
||||||
test binemit
|
test binemit
|
||||||
set is_64bit
|
set is_64bit
|
||||||
set is_compressed
|
set opt_level=best
|
||||||
isa x86 haswell
|
isa x86 haswell
|
||||||
|
|
||||||
; The binary encodings can be verified with the command:
|
; The binary encodings can be verified with the command:
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
; Test legalization of a non-colocated call in 64-bit non-PIC mode.
|
; Test legalization of a non-colocated call in 64-bit non-PIC mode.
|
||||||
test legalizer
|
test legalizer
|
||||||
set is_64bit
|
set is_64bit
|
||||||
set is_compressed
|
set opt_level=best
|
||||||
isa x86 haswell
|
isa x86 haswell
|
||||||
|
|
||||||
function %call() {
|
function %call() {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
test compile
|
test compile
|
||||||
set is_64bit
|
set is_64bit
|
||||||
set is_compressed
|
set opt_level=best
|
||||||
set is_pic
|
set is_pic
|
||||||
isa x86 haswell
|
isa x86 haswell
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ use cretonne_codegen::dbg::DisplayList;
|
|||||||
use cretonne_codegen::ir;
|
use cretonne_codegen::ir;
|
||||||
use cretonne_codegen::ir::entities::AnyEntity;
|
use cretonne_codegen::ir::entities::AnyEntity;
|
||||||
use cretonne_codegen::print_errors::pretty_error;
|
use cretonne_codegen::print_errors::pretty_error;
|
||||||
|
use cretonne_codegen::settings::OptLevel;
|
||||||
use cretonne_reader::TestCommand;
|
use cretonne_reader::TestCommand;
|
||||||
use match_directive::match_directive;
|
use match_directive::match_directive;
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
@@ -121,7 +122,7 @@ impl SubTest for TestBinEmit {
|
|||||||
.min();
|
.min();
|
||||||
func.stack_slots.frame_size = min_offset.map(|off| (-off) as u32);
|
func.stack_slots.frame_size = min_offset.map(|off| (-off) as u32);
|
||||||
|
|
||||||
let is_compressed = isa.flags().is_compressed();
|
let opt_level = isa.flags().opt_level();
|
||||||
|
|
||||||
// Give an encoding to any instruction that doesn't already have one.
|
// Give an encoding to any instruction that doesn't already have one.
|
||||||
let mut divert = RegDiversions::new();
|
let mut divert = RegDiversions::new();
|
||||||
@@ -141,11 +142,11 @@ impl SubTest for TestBinEmit {
|
|||||||
recipe_constraints.satisfied(inst, &divert, &func)
|
recipe_constraints.satisfied(inst, &divert, &func)
|
||||||
});
|
});
|
||||||
|
|
||||||
if is_compressed {
|
if opt_level == OptLevel::Best {
|
||||||
// Get the smallest legal encoding
|
// Get the smallest legal encoding
|
||||||
legal_encodings.min_by_key(|&e| encinfo.bytes(e))
|
legal_encodings.min_by_key(|&e| encinfo.bytes(e))
|
||||||
} else {
|
} else {
|
||||||
// If not using compressed, just use the first encoding.
|
// If not optimizing, just use the first encoding.
|
||||||
legal_encodings.next()
|
legal_encodings.next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user