Use existing is_equal predicate with the newly-shared condition codes

This removes the `HasConditionCode(&'static str)` predicate and the associated issues with that.
This commit is contained in:
Andrew Brown
2019-09-23 11:22:34 -07:00
parent c648fa3d06
commit 636ef98024
3 changed files with 6 additions and 20 deletions

View File

@@ -13,6 +13,7 @@ use crate::cdsl::operands::Operand;
use crate::cdsl::type_inference::Constraint;
use crate::cdsl::types::{LaneType, ReferenceType, ValueType, VectorType};
use crate::cdsl::typevar::TypeVar;
use cranelift_codegen_shared::condcodes::IntCC;
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct OpcodeNumber(u32);
@@ -630,7 +631,7 @@ pub enum FormatPredicateKind {
IsColocatedData,
/// Does the operation have a specific condition code?
HasConditionCode(&'static str),
HasConditionCode(IntCC),
}
#[derive(Clone, Hash, PartialEq, Eq)]
@@ -718,7 +719,7 @@ impl FormatPredicateNode {
format!("predicates::is_colocated_data({}, func)", self.member_name)
}
FormatPredicateKind::HasConditionCode(code) => format!(
"predicates::match_condition_code_to_str({}, \"{}\")",
"predicates::is_equal({}, IntCC::{:?})",
self.member_name, code
),
}
@@ -1006,7 +1007,7 @@ impl InstructionPredicate {
pub fn new_has_condition_code(
format: &InstructionFormat,
condition_code: &'static str,
condition_code: IntCC,
field_name: &'static str,
) -> InstructionPredicateNode {
InstructionPredicateNode::FormatPredicate(FormatPredicateNode::new(

View File

@@ -1,5 +1,6 @@
#![allow(non_snake_case)]
use cranelift_codegen_shared::condcodes::IntCC;
use std::collections::HashMap;
use crate::cdsl::encodings::{Encoding, EncodingBuilder};
@@ -2071,7 +2072,7 @@ pub(crate) fn define(
let instruction = icmp.bind_vector_from_lane(ty, sse_vector_size);
let f_int_compare = formats.get(formats.by_name("IntCompare"));
let has_eq_condition_code =
InstructionPredicate::new_has_condition_code(f_int_compare, "eq", "cond");
InstructionPredicate::new_has_condition_code(f_int_compare, IntCC::Equal, "cond");
let template = rec_icscc_fpr.nonrex().opcodes(opcodes.clone());
e.enc_32_64_func(instruction, template, |builder| {
let builder = builder.inst_predicate(has_eq_condition_code);

View File

@@ -10,8 +10,6 @@
//! dead code warning.
use crate::ir;
use crate::ir::condcodes::IntCC;
use std::string::ToString;
/// Check that an integer value is zero.
#[allow(dead_code)]
@@ -85,14 +83,6 @@ pub fn has_length_of(value_list: &ir::ValueList, num: usize, func: &ir::Function
value_list.len(&func.dfg.value_lists) == num
}
#[allow(dead_code)]
pub fn match_condition_code_to_str(
condition_code: IntCC,
stringified_condition_code: &str,
) -> bool {
condition_code.to_string().eq(stringified_condition_code)
}
#[cfg(test)]
mod tests {
use super::*;
@@ -146,10 +136,4 @@ mod tests {
assert!(!is_all_ones_128_bit(&[0; 16]));
assert!(is_all_ones_128_bit(&[0xff; 16]));
}
#[test]
fn condition_code() {
assert!(match_condition_code_to_str(IntCC::Equal, "eq"));
assert!(!match_condition_code_to_str(IntCC::Equal, "ne"));
}
}