Browse Source

add bnot to peepmatic + transform rule

pull/2022/head
MaxGraey 4 years ago
parent
commit
5b38857e7f
  1. 6
      cranelift/codegen/src/peepmatic.rs
  2. 1
      cranelift/codegen/src/preopt.peepmatic
  3. BIN
      cranelift/codegen/src/preopt.serialized
  4. 4
      cranelift/peepmatic/crates/runtime/src/operator.rs

6
cranelift/codegen/src/peepmatic.rs

@ -237,6 +237,7 @@ impl Opcode {
BandImm,
Bconst,
Bint,
Bnot,
Bor,
BorImm,
Brnz,
@ -549,6 +550,11 @@ unsafe impl<'a, 'b> InstructionSet<'b> for &'a dyn TargetIsa {
let val = pos.ins().bint(ty, a);
pos.func.dfg.value_def(val).unwrap_inst().into()
}
Operator::Bnot => {
let a = part_to_value(pos, root, a).unwrap();
let val = pos.ins().bnot(a);
pos.func.dfg.value_def(val).unwrap_inst().into()
}
Operator::Brnz => {
let a = part_to_value(pos, root, a).unwrap();

1
cranelift/codegen/src/preopt.peepmatic

@ -112,6 +112,7 @@
;; Replace with negative 1.
(=> (bor_imm -1 $x) -1)
(=> (bxor_imm -1 $x) (bnot $x))
;; Transform `[(x << N) >> N]` into a (un)signed-extending move.
;;

BIN
cranelift/codegen/src/preopt.serialized

Binary file not shown.

4
cranelift/peepmatic/crates/runtime/src/operator.rs

@ -45,6 +45,10 @@ pub enum Operator {
#[peepmatic(params(bNN), result(iNN))]
Bint,
/// `bnot`
#[peepmatic(params(iNN), result(iNN))]
Bnot,
/// `bor`
#[peepmatic(params(iNN, iNN), result(iNN))]
Bor,

Loading…
Cancel
Save