remove old is_terminating function
for InstructionData. Use generated `is_terminator()` for `Opcode` instead. `is_terminator`, `can_trap` and `is_branch` functions are now public. fix syntax error
This commit is contained in:
committed by
Jakob Stoklund Olesen
parent
93aa2b456e
commit
c1ecb29851
@@ -272,17 +272,22 @@ def gen_opcodes(groups, fmt):
|
|||||||
fmt.line()
|
fmt.line()
|
||||||
|
|
||||||
with fmt.indented('impl Opcode {', '}'):
|
with fmt.indented('impl Opcode {', '}'):
|
||||||
attrs = ['is_branch', 'is_terminator', 'can_trap']
|
attrs = [
|
||||||
|
{ 'name': 'is_branch', 'comment': 'True for all branch instructions.' },
|
||||||
|
{ 'name': 'is_terminator', 'comment': 'True for instructions that terminate EBB.' },
|
||||||
|
{ 'name': 'can_trap', 'comment': 'True if instruction could trap.' }
|
||||||
|
]
|
||||||
|
|
||||||
for attr in attrs:
|
for attr in attrs:
|
||||||
if attr != attrs[0]:
|
if attr != attrs[0]:
|
||||||
fmt.line()
|
fmt.line()
|
||||||
|
|
||||||
with fmt.indented('fn {}(self) -> bool {{'
|
fmt.doc_comment(attr['comment'])
|
||||||
.format(attr), '}'):
|
with fmt.indented('pub fn {}(self) -> bool {{'
|
||||||
|
.format(attr['name']), '}'):
|
||||||
with fmt.indented('match self {', '}'):
|
with fmt.indented('match self {', '}'):
|
||||||
for i in instrs:
|
for i in instrs:
|
||||||
if getattr(i, attr):
|
if getattr(i, attr['name']):
|
||||||
fmt.format('Opcode::{} => true,', i.camel_name, i.name)
|
fmt.format('Opcode::{} => true,', i.camel_name, i.name)
|
||||||
|
|
||||||
fmt.line('_ => false')
|
fmt.line('_ => false')
|
||||||
|
|||||||
@@ -465,16 +465,6 @@ impl InstructionData {
|
|||||||
_ => CallInfo::NotACall,
|
_ => CallInfo::NotACall,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return true if an instruction is terminating, or false otherwise.
|
|
||||||
pub fn is_terminating<'a>(&'a self) -> bool {
|
|
||||||
match self {
|
|
||||||
&InstructionData::Jump { .. } => true,
|
|
||||||
&InstructionData::Return { .. } => true,
|
|
||||||
&InstructionData::Nullary { .. } => true,
|
|
||||||
_ => false,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Information about branch and jump instructions.
|
/// Information about branch and jump instructions.
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ impl<'a> Verifier<'a> {
|
|||||||
|
|
||||||
fn ebb_integrity(&self, ebb: Ebb, inst: Inst) -> Result<()> {
|
fn ebb_integrity(&self, ebb: Ebb, inst: Inst) -> Result<()> {
|
||||||
|
|
||||||
let is_terminator = self.func.dfg[inst].is_terminating();
|
let is_terminator = self.func.dfg[inst].opcode().is_terminator();
|
||||||
let is_last_inst = self.func.layout.last_inst(ebb) == inst;
|
let is_last_inst = self.func.layout.last_inst(ebb) == inst;
|
||||||
|
|
||||||
if is_terminator && !is_last_inst {
|
if is_terminator && !is_last_inst {
|
||||||
|
|||||||
Reference in New Issue
Block a user