diff --git a/compiler/lib/Conversion/ConcreteToBConcrete/ConcreteToBConcrete.cpp b/compiler/lib/Conversion/ConcreteToBConcrete/ConcreteToBConcrete.cpp index 2513255a3..a0e9c993c 100644 --- a/compiler/lib/Conversion/ConcreteToBConcrete/ConcreteToBConcrete.cpp +++ b/compiler/lib/Conversion/ConcreteToBConcrete/ConcreteToBConcrete.cpp @@ -777,6 +777,8 @@ struct FromElementsOpPattern if (converter.isLegal(resultTy)) { return mlir::failure(); } + auto oldTensorResultTy = resultTy.cast(); + auto oldRank = oldTensorResultTy.getRank(); auto newTensorResultTy = converter.convertType(resultTy).cast(); @@ -786,11 +788,12 @@ struct FromElementsOpPattern mlir::Value tensor = rewriter.create( fromElementsOp.getLoc(), newTensorResultTy, mlir::ValueRange{}); - // sizes are [1, ..., 1, lweSize] - llvm::SmallVector sizes(newRank - 1, + // sizes are [1, ..., 1, diffShape...] + llvm::SmallVector sizes(oldRank, rewriter.getI64IntegerAttr(1)); - sizes.push_back( - rewriter.getI64IntegerAttr(*(newTensorResultTy.getShape().end() - 1))); + for (auto i = newRank - oldRank; i > 0; i--) { + sizes.push_back(rewriter.getI64IntegerAttr(*(newShape.end() - i))); + } // strides are [1, ..., 1] llvm::SmallVector oneStrides( diff --git a/compiler/tests/check_tests/BugReport/bug_report_785.mlir b/compiler/tests/check_tests/BugReport/bug_report_785.mlir new file mode 100644 index 000000000..7a6dc0e81 --- /dev/null +++ b/compiler/tests/check_tests/BugReport/bug_report_785.mlir @@ -0,0 +1,8 @@ +// RUN: concretecompiler --action=dump-llvm-ir %s +// Just ensure that compile +// https://github.com/zama-ai/concrete-compiler-internal/issues/785 +func.func @main(%arg0: !FHE.eint<15>, %cst: tensor<32768xi64>) -> tensor<1x!FHE.eint<15>> { + %1 = "FHE.apply_lookup_table"(%arg0, %cst) : (!FHE.eint<15>, tensor<32768xi64>) -> !FHE.eint<15> + %6 = tensor.from_elements %1 : tensor<1x!FHE.eint<15>> // ERROR HERE line 4 + return %6 : tensor<1x!FHE.eint<15>> +}