mirror of
https://github.com/zama-ai/concrete.git
synced 2026-02-08 19:44:57 -05:00
chore: activate Wall Werror
This commit is contained in:
@@ -9,7 +9,10 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
# Wouldn't be able to compile LLVM without this on Mac (using either Clang or AppleClang)
|
||||
if(APPLE)
|
||||
add_definitions("-Wno-narrowing -Wno-dollar-in-identifier-extension")
|
||||
add_definitions("-Wno-narrowing -Wno-dollar-in-identifier-extension -Wno-string-conversion -Wno-pessimizing-move")
|
||||
else()
|
||||
add_definitions("-Wall -Wno-pessimizing-move")
|
||||
add_definitions("-Werror ")
|
||||
endif()
|
||||
|
||||
# If we are trying to build the compiler with LLVM/MLIR as libraries
|
||||
|
||||
@@ -54,15 +54,6 @@ struct V0Parameter {
|
||||
|
||||
llvm::Optional<LargeIntegerParameter> largeInteger;
|
||||
|
||||
V0Parameter() {}
|
||||
|
||||
V0Parameter(size_t glweDimension, size_t logPolynomialSize, size_t nSmall,
|
||||
size_t brLevel, size_t brLogBase, size_t ksLevel,
|
||||
size_t ksLogBase)
|
||||
: glweDimension(glweDimension), logPolynomialSize(logPolynomialSize),
|
||||
nSmall(nSmall), brLevel(brLevel), brLogBase(brLogBase),
|
||||
ksLevel(ksLevel), ksLogBase(ksLogBase) {}
|
||||
|
||||
// TODO remove the shift when we have true polynomial size
|
||||
size_t getPolynomialSize() { return 1 << logPolynomialSize; }
|
||||
|
||||
|
||||
@@ -1,15 +1,3 @@
|
||||
add_compile_options(-Werror)
|
||||
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||
# using Clang
|
||||
add_compile_options(-Wno-error=pessimizing-move -Wno-pessimizing-move)
|
||||
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
# using GCC
|
||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 9.0)
|
||||
add_compile_options(-Werror -Wno-error=pessimizing-move -Wno-pessimizing-move)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
add_mlir_library(
|
||||
ConcretelangClientLib
|
||||
ClientLambda.cpp
|
||||
|
||||
@@ -48,11 +48,7 @@ struct ConcreteToBConcretePass
|
||||
: public ConcreteToBConcreteBase<ConcreteToBConcretePass> {
|
||||
void runOnOperation() final;
|
||||
ConcreteToBConcretePass() = delete;
|
||||
ConcreteToBConcretePass(bool loopParallelize)
|
||||
: loopParallelize(loopParallelize){};
|
||||
|
||||
private:
|
||||
bool loopParallelize;
|
||||
ConcreteToBConcretePass(bool _loopParallelize){};
|
||||
};
|
||||
} // namespace
|
||||
|
||||
|
||||
@@ -245,7 +245,7 @@ struct FHEToTFHEPass : public FHEToTFHEBase<FHEToTFHEPass> {
|
||||
FHEToTFHEPass(mlir::concretelang::ApplyLookupTableLowering lutLowerStrategy)
|
||||
: lutLowerStrategy(lutLowerStrategy) {}
|
||||
|
||||
void runOnOperation() {
|
||||
void runOnOperation() override {
|
||||
auto op = this->getOperation();
|
||||
|
||||
mlir::ConversionTarget target(getContext());
|
||||
|
||||
@@ -30,8 +30,8 @@ public:
|
||||
|
||||
LinalgRewritePattern(::mlir::MLIRContext *context, bool parallelizeLoops,
|
||||
mlir::PatternBenefit benefit = 0)
|
||||
: parallelizeLoops(parallelizeLoops),
|
||||
::mlir::OpRewritePattern<mlir::linalg::GenericOp>(context, benefit) {}
|
||||
: ::mlir::OpRewritePattern<mlir::linalg::GenericOp>(context, benefit),
|
||||
parallelizeLoops(parallelizeLoops) {}
|
||||
|
||||
mlir::LogicalResult
|
||||
matchAndRewrite(mlir::linalg::GenericOp linalgOp,
|
||||
|
||||
@@ -397,19 +397,19 @@ struct BufferizableWithSyncCallOpInterface
|
||||
template <>
|
||||
void pushAdditionalArgs(BConcrete::AddPlaintextLweBufferOp op,
|
||||
mlir::SmallVector<mlir::Value> &operands,
|
||||
RewriterBase &rewriter){};
|
||||
RewriterBase &rewriter) {}
|
||||
template <>
|
||||
void pushAdditionalArgs(BConcrete::AddLweBuffersOp op,
|
||||
mlir::SmallVector<mlir::Value> &operands,
|
||||
RewriterBase &rewriter){};
|
||||
RewriterBase &rewriter) {}
|
||||
template <>
|
||||
void pushAdditionalArgs(BConcrete::MulCleartextLweBufferOp op,
|
||||
mlir::SmallVector<mlir::Value> &operands,
|
||||
RewriterBase &rewriter){};
|
||||
RewriterBase &rewriter) {}
|
||||
template <>
|
||||
void pushAdditionalArgs(BConcrete::NegateLweBufferOp op,
|
||||
mlir::SmallVector<mlir::Value> &operands,
|
||||
RewriterBase &rewriter){};
|
||||
RewriterBase &rewriter) {}
|
||||
|
||||
template <>
|
||||
void pushAdditionalArgs(BConcrete::KeySwitchLweBufferOp op,
|
||||
@@ -429,7 +429,7 @@ void pushAdditionalArgs(BConcrete::KeySwitchLweBufferOp op,
|
||||
op.getLoc(), op.lwe_dim_outAttr()));
|
||||
// context
|
||||
operands.push_back(getContextArgument(op));
|
||||
};
|
||||
}
|
||||
|
||||
template <>
|
||||
void pushAdditionalArgs(BConcrete::BootstrapLweBufferOp op,
|
||||
@@ -455,7 +455,7 @@ void pushAdditionalArgs(BConcrete::BootstrapLweBufferOp op,
|
||||
op.getLoc(), op.outPrecisionAttr()));
|
||||
// context
|
||||
operands.push_back(getContextArgument(op));
|
||||
};
|
||||
}
|
||||
|
||||
template <>
|
||||
void pushAdditionalArgs(BConcrete::KeySwitchLweBufferAsyncOffloadOp op,
|
||||
@@ -463,7 +463,7 @@ void pushAdditionalArgs(BConcrete::KeySwitchLweBufferAsyncOffloadOp op,
|
||||
RewriterBase &rewriter) {
|
||||
// context
|
||||
operands.push_back(getContextArgument(op));
|
||||
};
|
||||
}
|
||||
|
||||
template <>
|
||||
void pushAdditionalArgs(BConcrete::BootstrapLweBufferAsyncOffloadOp op,
|
||||
@@ -489,7 +489,7 @@ void pushAdditionalArgs(BConcrete::BootstrapLweBufferAsyncOffloadOp op,
|
||||
op.getLoc(), op.outPrecisionAttr()));
|
||||
// context
|
||||
operands.push_back(getContextArgument(op));
|
||||
};
|
||||
}
|
||||
|
||||
template <>
|
||||
void pushAdditionalArgs(BConcrete::WopPBSCRTLweBufferOp op,
|
||||
@@ -524,7 +524,7 @@ void pushAdditionalArgs(BConcrete::WopPBSCRTLweBufferOp op,
|
||||
op.getLoc(), op.packingKeySwitchoutputPolynomialSizeAttr()));
|
||||
// context
|
||||
operands.push_back(getContextArgument(op));
|
||||
};
|
||||
}
|
||||
} // namespace
|
||||
|
||||
void mlir::concretelang::BConcrete::
|
||||
|
||||
@@ -22,7 +22,7 @@ void async_keyswitch(
|
||||
get_engine(context), get_keyswitch_key_u64(context),
|
||||
out_aligned + out_offset, ct0_aligned + ct0_offset));
|
||||
promise.set_value(concretelang::clientlib::MemRefDescriptor<1>{
|
||||
out_allocated, out_aligned, out_offset, out_size, out_stride});
|
||||
out_allocated, out_aligned, out_offset, {out_size}, {out_stride}});
|
||||
}
|
||||
|
||||
void *memref_keyswitch_async_lwe_u64(
|
||||
@@ -71,7 +71,7 @@ void async_bootstrap(
|
||||
get_fftw_fourier_bootstrap_key_u64(context), out_aligned + out_offset,
|
||||
ct0_aligned + ct0_offset, glwe_ct));
|
||||
promise.set_value(concretelang::clientlib::MemRefDescriptor<1>{
|
||||
out_allocated, out_aligned, out_offset, out_size, out_stride});
|
||||
out_allocated, out_aligned, out_offset, {out_size}, {out_stride}});
|
||||
free(glwe_ct);
|
||||
}
|
||||
|
||||
|
||||
@@ -32,7 +32,9 @@ static std::vector<GenericComputeClient> gcc;
|
||||
static hpx::lcos::barrier *_dfr_jit_phase_barrier;
|
||||
static hpx::lcos::barrier *_dfr_startup_barrier;
|
||||
static size_t num_nodes = 0;
|
||||
#if CONCRETELANG_TIMING_ENABLED
|
||||
static struct timespec init_timer, broadcast_timer, compute_timer, whole_timer;
|
||||
#endif
|
||||
} // namespace
|
||||
} // namespace dfr
|
||||
} // namespace concretelang
|
||||
@@ -1292,7 +1294,9 @@ namespace {
|
||||
static bool is_jit_p = false;
|
||||
static bool use_omp_p = false;
|
||||
static size_t num_nodes = 1;
|
||||
#if CONCRETELANG_TIMING_ENABLED
|
||||
static struct timespec compute_timer;
|
||||
#endif
|
||||
} // namespace
|
||||
|
||||
void _dfr_set_required(bool is_required) {}
|
||||
|
||||
@@ -1,13 +1,7 @@
|
||||
add_compile_options( -Werror )
|
||||
|
||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||
# using Clang
|
||||
add_compile_options( -Wno-error=pessimizing-move -Wno-pessimizing-move )
|
||||
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
# using GCC
|
||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 9.0)
|
||||
add_compile_options( -Wno-error=cast-function-type -Wno-cast-function-type)
|
||||
add_compile_options( -Werror -Wno-error=pessimizing-move -Wno-pessimizing-move )
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
@@ -59,22 +59,22 @@ llvm::Expected<CircuitGate> gateFromMLIRType(LweSecretKeyID secretKeyID,
|
||||
}
|
||||
if (auto lweTy = type.dyn_cast_or_null<
|
||||
mlir::concretelang::Concrete::LweCiphertextType>()) {
|
||||
bool sign = lweTy.isSignedInteger();
|
||||
return CircuitGate{
|
||||
/* .encryption = */ llvm::Optional<EncryptionGate>({
|
||||
/* .secretKeyID = */ secretKeyID,
|
||||
/* .variance = */ variance,
|
||||
/* .encoding = */
|
||||
{
|
||||
/* .precision = */ lweTy.getP(),
|
||||
/* .precision = */ (size_t)lweTy.getP(),
|
||||
/* .crt = */ lweTy.getCrtDecomposition().vec(),
|
||||
},
|
||||
}),
|
||||
/*.shape = */
|
||||
{
|
||||
/*.width = */ lweTy.getP(),
|
||||
/*.dimensions = */ std::vector<int64_t>(),
|
||||
/*.size = */ 0,
|
||||
},
|
||||
{/*.width = */ (size_t)lweTy.getP(),
|
||||
/*.dimensions = */ std::vector<int64_t>(),
|
||||
/*.size = */ 0,
|
||||
/* .sign */ sign},
|
||||
};
|
||||
}
|
||||
auto tensor = type.dyn_cast_or_null<mlir::RankedTensorType>();
|
||||
@@ -99,7 +99,7 @@ llvm::Expected<ClientParameters>
|
||||
createClientParametersForV0(V0FHEContext fheContext,
|
||||
llvm::StringRef functionName,
|
||||
mlir::ModuleOp module) {
|
||||
auto v0Param = fheContext.parameter;
|
||||
V0Parameter &v0Param = fheContext.parameter;
|
||||
Variance inputVariance =
|
||||
v0Curve->getVariance(1, v0Param.getNBigLweDimension(), 64);
|
||||
|
||||
|
||||
@@ -209,6 +209,7 @@ llvm::Expected<V0Parameter> getParameter(optimizer::Description &descr,
|
||||
params.brLogBase = sol.br_decomposition_base_log;
|
||||
params.ksLevel = sol.ks_decomposition_level_count;
|
||||
params.ksLogBase = sol.ks_decomposition_base_log;
|
||||
params.largeInteger = llvm::None;
|
||||
|
||||
if (sol.use_wop_pbs) {
|
||||
if (sol.crt_decomposition.empty()) {
|
||||
|
||||
@@ -229,7 +229,7 @@ llvm::cl::list<size_t> v0Constraint(
|
||||
"Force the compiler to use the given v0 constraint [p, norm2]"),
|
||||
llvm::cl::ZeroOrMore, llvm::cl::MiscFlags::CommaSeparated);
|
||||
|
||||
llvm::cl::list<int64_t> v0Parameter(
|
||||
llvm::cl::list<size_t> v0Parameter(
|
||||
"v0-parameter",
|
||||
llvm::cl::desc(
|
||||
"Force to apply the given v0 parameters [glweDimension, "
|
||||
@@ -316,11 +316,10 @@ cmdlineCompilationOptions() {
|
||||
"The v0-parameter option expect a list of size 7",
|
||||
llvm::inconvertibleErrorCode());
|
||||
}
|
||||
options.v0Parameter = mlir::concretelang::V0Parameter(
|
||||
cmdline::v0Parameter[0], cmdline::v0Parameter[1],
|
||||
cmdline::v0Parameter[2], cmdline::v0Parameter[3],
|
||||
cmdline::v0Parameter[4], cmdline::v0Parameter[5],
|
||||
cmdline::v0Parameter[6]);
|
||||
options.v0Parameter = {cmdline::v0Parameter[0], cmdline::v0Parameter[1],
|
||||
cmdline::v0Parameter[2], cmdline::v0Parameter[3],
|
||||
cmdline::v0Parameter[4], cmdline::v0Parameter[5],
|
||||
cmdline::v0Parameter[6], llvm::None};
|
||||
}
|
||||
|
||||
// Setup the large integer options
|
||||
|
||||
@@ -151,8 +151,8 @@ static int registerEndToEndTestFromFile(std::string prefix, std::string path,
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
char *bench_name = "MLBench";
|
||||
char *file_name =
|
||||
char const *bench_name = "MLBench";
|
||||
char const *file_name =
|
||||
"tests/end_to_end_benchmarks/mlbench/end_to_end_mlbench.yaml";
|
||||
size_t stack_size = 0;
|
||||
|
||||
|
||||
@@ -316,9 +316,10 @@ template <> struct llvm::yaml::MappingTraits<EndToEndDesc> {
|
||||
"[glweDimension, logPolynomialSize, nSmall, brLevel, "
|
||||
"brLobBase, ksLevel, ksLogBase]");
|
||||
}
|
||||
desc.v0Parameter = mlir::concretelang::V0Parameter(
|
||||
v0parameter[0], v0parameter[1], v0parameter[2], v0parameter[3],
|
||||
v0parameter[4], v0parameter[5], v0parameter[6]);
|
||||
desc.v0Parameter = {(size_t)v0parameter[0], (size_t)v0parameter[1],
|
||||
(size_t)v0parameter[2], (size_t)v0parameter[3],
|
||||
(size_t)v0parameter[4], (size_t)v0parameter[5],
|
||||
(size_t)v0parameter[6], llvm::None};
|
||||
}
|
||||
std::vector<int64_t> v0constraint;
|
||||
io.mapOptional("v0-constraint", v0constraint);
|
||||
|
||||
@@ -106,7 +106,7 @@ TEST(ParallelizeAndRunFHE, nn_small_parallel) {
|
||||
std::vector<uint8_t> input;
|
||||
input.reserve(dim0 * dim1);
|
||||
|
||||
for (int i = 0; i < dim0 * dim1; ++i)
|
||||
for (size_t i = 0; i < dim0 * dim1; ++i)
|
||||
input.push_back(i % 17 % 4);
|
||||
|
||||
mlir::concretelang::TensorLambdaArgument<
|
||||
@@ -148,7 +148,7 @@ TEST(ParallelizeAndRunFHE, nn_small_sequential) {
|
||||
std::vector<uint8_t> input;
|
||||
input.reserve(dim0 * dim1);
|
||||
|
||||
for (int i = 0; i < dim0 * dim1; ++i)
|
||||
for (size_t i = 0; i < dim0 * dim1; ++i)
|
||||
input.push_back(i % 17 % 4);
|
||||
|
||||
mlir::concretelang::TensorLambdaArgument<
|
||||
|
||||
@@ -89,7 +89,7 @@ func.func @main(%arg0: tensor<200x4x!FHE.eint<4>>) -> tensor<200x8x!FHE.eint<4>>
|
||||
std::vector<uint8_t> input;
|
||||
input.reserve(dim0 * dim1);
|
||||
|
||||
for (int i = 0; i < dim0 * dim1; ++i)
|
||||
for (size_t i = 0; i < dim0 * dim1; ++i)
|
||||
input.push_back(i % 17 % 4);
|
||||
|
||||
mlir::concretelang::TensorLambdaArgument<
|
||||
@@ -130,7 +130,7 @@ TEST(Distributed, nn_med_sequential) {
|
||||
std::vector<uint8_t> input;
|
||||
input.reserve(dim0 * dim1);
|
||||
|
||||
for (int i = 0; i < dim0 * dim1; ++i)
|
||||
for (size_t i = 0; i < dim0 * dim1; ++i)
|
||||
input.push_back(i % 17 % 4);
|
||||
|
||||
mlir::concretelang::TensorLambdaArgument<
|
||||
|
||||
@@ -36,9 +36,9 @@ func.func @main(%arg0: tensor<3x2x!FHE.eint<4>>) -> tensor<3x!FHE.eint<4>> {
|
||||
|
||||
ASSERT_EQ(res->size(), (size_t)3);
|
||||
|
||||
EXPECT_EQ((*res)[0], 1);
|
||||
EXPECT_EQ((*res)[1], 3);
|
||||
EXPECT_EQ((*res)[2], 5);
|
||||
EXPECT_EQ((*res)[0], (uint64_t)1);
|
||||
EXPECT_EQ((*res)[1], (uint64_t)3);
|
||||
EXPECT_EQ((*res)[2], (uint64_t)5);
|
||||
}
|
||||
|
||||
TEST(End2EndJit_FHELinalg, extract_slice_nonzero_offset_regression) {
|
||||
@@ -65,9 +65,9 @@ func.func @main(%arg0: tensor<3x2x!FHE.eint<4>>) -> tensor<3x!FHE.eint<4>> {
|
||||
|
||||
ASSERT_EQ(res->size(), (size_t)3);
|
||||
|
||||
EXPECT_EQ((*res)[0], 2);
|
||||
EXPECT_EQ((*res)[1], 4);
|
||||
EXPECT_EQ((*res)[2], 6);
|
||||
EXPECT_EQ((*res)[0], (uint64_t)2);
|
||||
EXPECT_EQ((*res)[1], (uint64_t)4);
|
||||
EXPECT_EQ((*res)[2], (uint64_t)6);
|
||||
}
|
||||
|
||||
// Same as add_eint_int_term_to_term test above, but returning a lambda argument
|
||||
|
||||
@@ -43,17 +43,17 @@ TEST(Support, client_parameters_json_serde) {
|
||||
params0.inputs = {
|
||||
{
|
||||
/*.encryption = */ {{clientlib::SMALL_KEY, 0.00, {4, {1, 2, 3, 4}}}},
|
||||
/*.shape = */ {32, {1, 2, 3, 4}, 1 * 2 * 3 * 4},
|
||||
/*.shape = */ {32, {1, 2, 3, 4}, 1 * 2 * 3 * 4, false},
|
||||
},
|
||||
{
|
||||
/*.encryption = */ {{clientlib::SMALL_KEY, 0.00, {5}}},
|
||||
/*.shape = */ {8, {4, 4, 4, 4}, 4 * 4 * 4 * 4},
|
||||
/*.encryption = */ {{clientlib::SMALL_KEY, 0.00, {5, {1, 2, 3, 4}}}},
|
||||
/*.shape = */ {8, {4, 4, 4, 4}, 4 * 4 * 4 * 4, false},
|
||||
},
|
||||
};
|
||||
params0.outputs = {
|
||||
{
|
||||
/*.encryption = */ {{clientlib::SMALL_KEY, 0.00, {5}}},
|
||||
/*.shape = */ {8, {4, 4, 4, 4}, 4 * 4 * 4 * 4},
|
||||
/*.encryption = */ {{clientlib::SMALL_KEY, 0.00, {5, {1, 2, 3, 4}}}},
|
||||
/*.shape = */ {8, {4, 4, 4, 4}, 4 * 4 * 4 * 4, false},
|
||||
},
|
||||
};
|
||||
auto json = clientlib::toJSON(params0);
|
||||
|
||||
@@ -154,7 +154,7 @@ func.func @main(%arg0: !FHE.eint<7>, %arg1: !FHE.eint<7>) -> !FHE.eint<7> {
|
||||
continue;
|
||||
}
|
||||
auto res = lambda.call(a, b);
|
||||
ASSERT_EQ_OUTCOME(res, a + b);
|
||||
ASSERT_EQ_OUTCOME(res, (scalar_out)a + b);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -332,7 +332,7 @@ func.func @main(%arg0: tensor<2x3x1x!FHE.eint<7>>, %arg1: tensor<2x3x1x!FHE.eint
|
||||
for (size_t i = 0; i < v.size(); i++) {
|
||||
for (size_t j = 0; j < v[i].size(); j++) {
|
||||
for (size_t k = 0; k < v[i][j].size(); k++) {
|
||||
EXPECT_EQ(v[i][j][k], 2 * ta[i][j][k]);
|
||||
EXPECT_EQ(v[i][j][k], (scalar_out)2 * ta[i][j][k]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -400,6 +400,6 @@ func.func @main(%arg0: !FHE.eint<6>, %arg1: !FHE.eint<3>) -> !FHE.eint<6> {
|
||||
for (auto a : values_6bits())
|
||||
for (auto b : values_3bits()) {
|
||||
auto res = lambda.call(a, b);
|
||||
ASSERT_EQ_OUTCOME(res, a + b);
|
||||
ASSERT_EQ_OUTCOME(res, (scalar_out)a + b);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user