Add constraint summaries to RecipeConstraints.

Most instructions don't have any fixed register constraints. Add boolean
summaries that can be used to check if it is worthwhile to scan the
constraint lists when looking for a fixed register constraint.

Also add a tied_ops summary bool which indicates that the instruction
has tied operand constraints.
This commit is contained in:
Jakob Stoklund Olesen
2017-05-08 12:44:22 -07:00
parent 0f41cbdee2
commit 39e69ff565
2 changed files with 18 additions and 0 deletions

View File

@@ -474,6 +474,15 @@ def emit_recipe_constraints(isa, fmt):
with fmt.indented('RecipeConstraints {', '},'):
emit_operand_constraints(r, r.ins, 'ins', tied_i2o, fmt)
emit_operand_constraints(r, r.outs, 'outs', tied_o2i, fmt)
fmt.format(
'fixed_ins: {},',
str(any(isinstance(c, Register)
for c in r.ins)).lower())
fmt.format(
'fixed_outs: {},',
str(any(isinstance(c, Register)
for c in r.outs)).lower())
fmt.format('tied_ops: {},', str(bool(tied_i2o)).lower())
def emit_operand_constraints(

View File

@@ -67,6 +67,15 @@ pub struct RecipeConstraints {
/// If the instruction produces a variable number of results, it's probably a call and the
/// constraints must be derived from the calling convention ABI.
pub outs: &'static [OperandConstraint],
/// Are any of the input constraints `FixedReg`?
pub fixed_ins: bool,
/// Are any of the output constraints `FixedReg`?
pub fixed_outs: bool,
/// Are there any tied operands?
pub tied_ops: bool,
}
/// Constraints on the range of a branch instruction.