// ============================================================================
// =   Please keep the patterns in alphabetical order by operator name   =
// ============================================================================

Pattern ConvertMfuseAclnnMatmul {
   let root = op<mfuse.aclnn.matmul>(operands: ValueRange) -> (result: Type);
   replace root with op<torch.aten.matmul>(convertValues(operands)) -> (convertType(result));
}

// mfuse.aclnn.mm is lowered in MfuseAclnnToTorch.cc so trans_x1/trans_x2 can be attached on torch.aten.mm.

Pattern ConvertMfuseAclnnSigmoid {
  let root = op<mfuse.aclnn.sigmoid>(operands: ValueRange) -> (result: Type);
  replace root with op<torch.aten.sigmoid>(convertValues(operands)) -> (convertType(result));
}

Pattern ConvertMfuseAclnnTanh {
  let root = op<mfuse.aclnn.tanh>(operands: ValueRange) -> (result: Type);
  replace root with op<torch.aten.tanh>(convertValues(operands)) -> (convertType(result));
}