cleanup(compiler/lowlfhe): Remove useless LowLFHE ops and types

Some of these operators/types could be usefull but they are not yet use on the compiler pipeline it's preferable to remove them, and reintroduce if needed.
This commit is contained in:
Quentin Bourgerie
2021-11-25 16:24:57 +01:00
parent ddca6840f1
commit b1e7a66b09
4 changed files with 77 additions and 532 deletions

View File

@@ -35,6 +35,11 @@ def NegateLweCiphertextOp : LowLFHE_Op<"negate_lwe_ciphertext"> {
let results = (outs LweCiphertextType:$result);
}
def GlweFromTable : LowLFHE_Op<"glwe_from_table"> {
let arguments = (ins TensorOf<[AnyInteger]>:$table, I32Attr:$polynomialSize, I32Attr:$k, I32Attr:$p);
let results = (outs GlweCiphertextType:$result);
}
def BootstrapLweOp : LowLFHE_Op<"bootstrap_lwe"> {
let arguments = (ins
// LweBootstrapKeyType:$bootstrap_key,
@@ -48,48 +53,6 @@ def BootstrapLweOp : LowLFHE_Op<"bootstrap_lwe"> {
let results = (outs LweCiphertextType:$result);
}
def DecryptGlweOp : LowLFHE_Op<"decrypt_glwe"> {
let arguments = (ins GlweSecretKeyType:$secret_key, GlweCiphertextType:$ciphertext);
let results = (outs PlaintextListType:$result);
}
def DecryptLweOp : LowLFHE_Op<"decrypt_lwe"> {
let arguments = (ins LweSecretKeyType:$secret_key, LweCiphertextType:$ciphertext);
let results = (outs PlaintextType:$result);
}
def EncryptGlweOp : LowLFHE_Op<"encrypt_glwe"> {
let arguments = (ins
GlweSecretKeyType:$secret_key,
PlaintextListType:$plaintext,
EncryptionRandomGeneratorType:$generator,
VarianceType:$variance
);
let results = (outs GlweCiphertextType:$result);
}
def EncryptLweOp : LowLFHE_Op<"encrypt_lwe"> {
let arguments = (ins
LweSecretKeyType:$secret_key,
PlaintextType:$plaintext,
EncryptionRandomGeneratorType:$generator,
VarianceType:$variance
);
let results = (outs LweCiphertextType:$result);
}
def GetPlaintextListElementOp : LowLFHE_Op<"get_plaintext_list_element">{
let arguments = (ins PlaintextListType:$plaintext, Index:$i);
let results = (outs AnySignlessInteger:$result);
}
def SetPlaintextListElementOp : LowLFHE_Op<"set_plaintext_list_element">{
let arguments = (ins PlaintextListType:$plaintext, Index:$i, AnySignlessInteger:$val);
let results = (outs );
}
def KeySwitchLweOp : LowLFHE_Op<"keyswitch_lwe"> {
let arguments = (ins
// LweKeySwitchKeyType:$keyswitch_key,
@@ -102,49 +65,6 @@ def KeySwitchLweOp : LowLFHE_Op<"keyswitch_lwe"> {
let results = (outs LweCiphertextType:$result);
}
def FillGlweSecretKeyOp : LowLFHE_Op<"fill_glwe_secret_key"> {
let arguments = (ins GlweSecretKeyType:$secret_key, SecretRandomGeneratorType:$generator);
let results = (outs );
}
def FillLweSecretKeyOp : LowLFHE_Op<"fill_lwe_secret_key"> {
let arguments = (ins LweSecretKeyType:$secret_key, SecretRandomGeneratorType:$generator);
let results = (outs );
}
def FillLweBootstrapKeyOp : LowLFHE_Op<"fill_lwe_bootstrap_key"> {
let arguments = (ins
LweBootstrapKeyType:$bootstrap_key,
LweSecretKeyType:$lwe_secret_key,
GlweSecretKeyType:$glwe_secret_key,
EncryptionRandomGeneratorType:$generator,
VarianceType:$noise
);
let results = (outs );
}
def FillLweKeyswitchKeyOp : LowLFHE_Op<"fill_lwe_keyswitch_key"> {
let arguments = (ins
LweKeySwitchKeyType:$keyswitch_key,
LweSecretKeyType:$input_key,
LweSecretKeyType:$output_key,
EncryptionRandomGeneratorType:$generator,
VarianceType:$noise
);
let results = (outs );
}
def FillPlaintextListWithExpansionOp : LowLFHE_Op<"fill_plaintext_list_with_expansion"> {
let arguments = (ins PlaintextListType:$output, ForeignPlaintextListType:$input);
let results = (outs );
}
def EncodeCleartextOp : LowLFHE_Op<"encode_cleartext"> {
let arguments = (ins CleartextType:$cleartext);
let results = (outs PlaintextType:$plaintext);
}
def EncodeIntOp : LowLFHE_Op<"encode_int"> {
let arguments = (ins AnyInteger:$i);
let results = (outs PlaintextType:$plaintext);
@@ -155,15 +75,4 @@ def IntToCleartextOp : LowLFHE_Op<"int_to_cleartext"> {
let results = (outs CleartextType:$cleartext);
}
def ConstCleartextOp : LowLFHE_Op<"const_cleartext", [ConstantLike]> {
// TODO: maybe restrict to specific attr?
let arguments = (ins AnyAttr:$value);
let results = (outs CleartextType:$cleartext);
}
def GlweFromTable : LowLFHE_Op<"glwe_from_table"> {
let arguments = (ins TensorOf<[AnyInteger]>:$table, I32Attr:$polynomialSize, I32Attr:$k, I32Attr:$p);
let results = (outs GlweCiphertextType:$result);
}
#endif

View File

@@ -6,17 +6,18 @@ include "mlir/IR/BuiltinTypes.td"
include "zamalang/Dialect/LowLFHE/IR/LowLFHEDialect.td"
class LowLFHE_Type<string name, list<Trait> traits = []> : TypeDef<LowLFHE_Dialect, name, traits> { }
def EncryptionRandomGeneratorType : LowLFHE_Type<"EncryptionRandomGenerator"> {
let mnemonic = "enc_rand_gen";
let summary = "Random source for encryption";
def GlweCiphertextType : LowLFHE_Type<"GlweCiphertext"> {
let mnemonic = "glwe_ciphertext";
let summary = "GLWE ciphertext";
let description = [{
Random source for encryption.
GLWE ciphertext.
}];
let printer = [{
$_printer << "enc_rand_gen";
$_printer << "glwe_ciphertext";
}];
let parser = [{
@@ -24,24 +25,84 @@ def EncryptionRandomGeneratorType : LowLFHE_Type<"EncryptionRandomGenerator"> {
}];
}
def SecretRandomGeneratorType : LowLFHE_Type<"SecretRandomGenerator"> {
let mnemonic = "secret_rand_gen";
def LweCiphertextType : LowLFHE_Type<"LweCiphertext", [MemRefElementTypeInterface]> {
let mnemonic = "lwe_ciphertext";
let summary = "Random source for secret key generation";
let summary = "LWE ciphertext";
let description = [{
Random source for secret key generation.
Learning With Error ciphertext.
}];
let parameters = (ins
// The size of the lwe ciphertext
"signed":$size,
// Precision of the lwe ciphertext
"signed":$p
);
let printer = [{
$_printer << "secret_rand_gen";
$_printer << "lwe_ciphertext<";
if (getImpl()->size == -1) $_printer << "_";
else $_printer << getImpl()->size;
$_printer << ",";
if (getImpl()->p == -1) $_printer << "_";
else $_printer << getImpl()->p;
$_printer << ">";
}];
let parser = [{
return get($_ctxt);
if ($_parser.parseLess())
return Type();
int size = -1;
if ($_parser.parseOptionalKeyword("_") && $_parser.parseInteger(size))
return Type();
if ($_parser.parseComma())
return Type();
int p = -1;
if ($_parser.parseOptionalKeyword("_") && $_parser.parseInteger(p))
return Type();
if ($_parser.parseGreater())
return Type();
Location loc = $_parser.getEncodedSourceLoc($_parser.getNameLoc());
return getChecked(loc, loc.getContext(), size, p);
}];
}
def CleartextType : LowLFHE_Type<"Cleartext"> {
let mnemonic = "cleartext";
let summary = "Cleartext";
let description = [{
Cleartext.
}];
let parameters = (ins
// Number of bits of the cleartext representation
"signed":$p
);
let printer = [{
$_printer << "cleartext<";
if (getImpl()->p == -1) $_printer << "_";
else $_printer << getImpl()->p;
$_printer << ">";
}];
let parser = [{
if ($_parser.parseLess())
return Type();
int p = -1;
if ($_parser.parseOptionalKeyword("_") && $_parser.parseInteger(p))
return Type();
if ($_parser.parseGreater())
return Type();
Location loc = $_parser.getEncodedSourceLoc($_parser.getNameLoc());
return getChecked(loc, loc.getContext(), p);
}];
}
def PlaintextType : LowLFHE_Type<"Plaintext"> {
let mnemonic = "plaintext";
@@ -113,52 +174,6 @@ def ForeignPlaintextListType : LowLFHE_Type<"ForeignPlaintextList"> {
}];
}
def LweCiphertextType : LowLFHE_Type<"LweCiphertext", [MemRefElementTypeInterface]> {
let mnemonic = "lwe_ciphertext";
let summary = "LWE ciphertext";
let description = [{
Learning With Error ciphertext.
}];
let parameters = (ins
// The size of the lwe ciphertext
"signed":$size,
// Precision of the lwe ciphertext
"signed":$p
);
let printer = [{
$_printer << "lwe_ciphertext<";
if (getImpl()->size == -1) $_printer << "_";
else $_printer << getImpl()->size;
$_printer << ",";
if (getImpl()->p == -1) $_printer << "_";
else $_printer << getImpl()->p;
$_printer << ">";
}];
let parser = [{
if ($_parser.parseLess())
return Type();
int size = -1;
if ($_parser.parseOptionalKeyword("_") && $_parser.parseInteger(size))
return Type();
if ($_parser.parseComma())
return Type();
int p = -1;
if ($_parser.parseOptionalKeyword("_") && $_parser.parseInteger(p))
return Type();
if ($_parser.parseGreater())
return Type();
Location loc = $_parser.getEncodedSourceLoc($_parser.getNameLoc());
return getChecked(loc, loc.getContext(), size, p);
}];
}
def LweKeySwitchKeyType : LowLFHE_Type<"LweKeySwitchKey"> {
let mnemonic = "lwe_key_switch_key";
@@ -195,205 +210,7 @@ def LweBootstrapKeyType : LowLFHE_Type<"LweBootstrapKey"> {
}];
}
def LweSecretKeyType : LowLFHE_Type<"LweSecretKey"> {
let mnemonic = "lwe_secret_key";
let summary = "LWE bootstrapping key";
let description = [{
Learning With Error bootstrapping key.
}];
let printer = [{
$_printer << "lwe_secret_key";
}];
let parser = [{
return get($_ctxt);
}];
}
def LweSizeType : LowLFHE_Type<"LweSize"> {
let mnemonic = "lwe_size";
let summary = "LWE size";
let description = [{
Learning With Error size.
}];
let printer = [{
$_printer << "lwe_size";
}];
let parser = [{
return get($_ctxt);
}];
}
def GlweCiphertextType : LowLFHE_Type<"GlweCiphertext"> {
let mnemonic = "glwe_ciphertext";
let summary = "GLWE ciphertext";
let description = [{
GLWE ciphertext.
}];
let printer = [{
$_printer << "glwe_ciphertext";
}];
let parser = [{
return get($_ctxt);
}];
}
def GlweSecretKeyType : LowLFHE_Type<"GlweSecretKey"> {
let mnemonic = "glwe_secret_key";
let summary = "GLWE secret key";
let description = [{
GLWE secret key.
}];
let printer = [{
$_printer << "glwe_secret_key";
}];
let parser = [{
return get($_ctxt);
}];
}
def GlweSizeType : LowLFHE_Type<"GlweSize"> {
let mnemonic = "glwe_size";
let summary = "GLWE size";
let description = [{
GLWE size.
}];
let printer = [{
$_printer << "glwe_size";
}];
let parser = [{
return get($_ctxt);
}];
}
def PolynomialSizeType : LowLFHE_Type<"PolynomialSize"> {
let mnemonic = "polynomial_size";
let summary = "Polynomial size";
let description = [{
Polynomial size.
}];
let printer = [{
$_printer << "polynomial_size";
}];
let parser = [{
return get($_ctxt);
}];
}
def DecompositionLevelCountType : LowLFHE_Type<"DecompositionLevelCount"> {
let mnemonic = "decomp_level_count";
let summary = "Decomposition level";
let description = [{
Decomposition level.
}];
let printer = [{
$_printer << "decomp_level_count";
}];
let parser = [{
return get($_ctxt);
}];
}
def DecompositionBaseLogType : LowLFHE_Type<"DecompositionBaseLog"> {
let mnemonic = "decomp_base_log";
let summary = "Decomposition base log";
let description = [{
Decomposition base log.
}];
let printer = [{
$_printer << "decomp_base_log";
}];
let parser = [{
return get($_ctxt);
}];
}
def VarianceType : LowLFHE_Type<"Variance"> {
let mnemonic = "variance";
let summary = "Variance";
let description = [{
Variance.
}];
let printer = [{
$_printer << "variance";
}];
let parser = [{
return get($_ctxt);
}];
}
def CleartextType : LowLFHE_Type<"Cleartext"> {
let mnemonic = "cleartext";
let summary = "Cleartext";
let description = [{
Cleartext.
}];
let parameters = (ins
// Number of bits of the cleartext representation
"signed":$p
);
let printer = [{
$_printer << "cleartext<";
if (getImpl()->p == -1) $_printer << "_";
else $_printer << getImpl()->p;
$_printer << ">";
}];
let parser = [{
if ($_parser.parseLess())
return Type();
int p = -1;
if ($_parser.parseOptionalKeyword("_") && $_parser.parseInteger(p))
return Type();
if ($_parser.parseGreater())
return Type();
Location loc = $_parser.getEncodedSourceLoc($_parser.getNameLoc());
return getChecked(loc, loc.getContext(), p);
}];
}