-
Notifications
You must be signed in to change notification settings - Fork 42
Open
Description
Hello,
For the program (function myfunc) below, and the following synthesis commands:
set-clock-period 13
compile --sharing --buffer-algorithm fpl22
write-hdl --hdl verilog
I get the following error:
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /data//workspace/dynamatic/bin/dynamatic-opt /home//turboturtle/fuzzing/run_20260112124954/run_20260112124954_design_0000/synth/../out/comp/handshake_transformed.mlir --handshake-mark-fpu-impl=impl=flopoco --handshake-set-buffering-properties=version=fpga20 "--handshake-place-buffers=algorithm=fpl22 solver=gurobi frequencies=/home//turboturtle/fuzzing/run_20260112124954/run_20260112124954_design_0000/synth/../out/comp/frequencies.csv timing-models=/data//workspace/dynamatic/data/components.json target-period=13.000 timeout=300 dump-logs blif-files=/data//workspace/dynamatic/data/aig/ lut-delay=0.55 lut-size=6 acyclic-type" "--credit-based-sharing=timing-models=/data//workspace/dynamatic/data/components.json target-period=13.000"
#0 0x00007ffff16299f8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/data//workspace/dynamatic/polygeist/llvm-project/build/./lib/libLLVMSupport.so.18git+0x1ca9f8)
#1 0x00007ffff16277de llvm::sys::RunSignalHandlers() (/data//workspace/dynamatic/polygeist/llvm-project/build/./lib/libLLVMSupport.so.18git+0x1c87de)
#2 0x00007ffff162a0a8 SignalHandler(int) Signals.cpp:0:0
#3 0x00007ffff0c45330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
#4 0x00005555557f412b std::_Function_handler<bool (mlir::Operation*), isShiftByConstantImpl(mlir::Operation*)::$_0>::_M_invoke(std::_Any_data const&, mlir::Operation*&&) HandshakeInterfaces.cpp:0:0
#5 0x00005555557f4192 std::_Function_handler<bool (mlir::Operation*), isShiftByConstantImpl(mlir::Operation*)::$_0>::_M_invoke(std::_Any_data const&, mlir::Operation*&&) HandshakeInterfaces.cpp:0:0
#6 0x00005555557f4192 std::_Function_handler<bool (mlir::Operation*), isShiftByConstantImpl(mlir::Operation*)::$_0>::_M_invoke(std::_Any_data const&, mlir::Operation*&&) HandshakeInterfaces.cpp:0:0
#7 0x00005555557f3ce0 dynamatic::handshake::ShRSIOp::isShiftByConstant() (/data//workspace/dynamatic/bin/dynamatic-opt+0x29fce0)
#8 0x00005555557bd47d dynamatic::handshake::detail::ShiftLikeArithOpInterfaceInterfaceTraits::Model<dynamatic::handshake::ShRSIOp>::isShiftByConstant(dynamatic::handshake::detail::ShiftLikeArithOpInterfaceInterfaceTraits::Concept const*, mlir::Operation*) HandshakeDialect.cpp:0:0
#9 0x00005555556b2447 dynamatic::buffer::BufferPlacementMILP::addUnitTimingConstraints(mlir::Operation*, dynamatic::SignalType, std::function<bool (mlir::Value)> const&) (/data//workspace/dynamatic/bin/dynamatic-opt+0x15e447)
#10 0x00005555556d24d1 dynamatic::buffer::fpl22::OutOfCycleBuffers::setup() (/data//workspace/dynamatic/bin/dynamatic-opt+0x17e4d1)
#11 0x000055555568d6c0 dynamatic::buffer::HandshakePlaceBuffersPass::getBufferPlacement(dynamatic::buffer::FuncInfo&, dynamatic::TimingDatabase&, dynamatic::Logger*, llvm::MapVector<mlir::Value, dynamatic::buffer::PlacementResult, llvm::DenseMap<mlir::Value, unsigned int, llvm::DenseMapInfo<mlir::Value, void>, llvm::detail::DenseMapPair<mlir::Value, unsigned int>>, llvm::SmallVector<std::pair<mlir::Value, dynamatic::buffer::PlacementResult>, 0u>>&) (/data//workspace/dynamatic/bin/dynamatic-opt+0x1396c0)
#12 0x000055555568ae5c dynamatic::buffer::HandshakePlaceBuffersPass::placeBuffers(dynamatic::buffer::FuncInfo&, dynamatic::TimingDatabase&, dynamatic::CFDFCAnalysis&) (/data//workspace/dynamatic/bin/dynamatic-opt+0x136e5c)
#13 0x00005555556885d8 dynamatic::buffer::HandshakePlaceBuffersPass::placeUsingMILP() (/data//workspace/dynamatic/bin/dynamatic-opt+0x1345d8)
#14 0x0000555555686d8e dynamatic::buffer::HandshakePlaceBuffersPass::runOnOperation() (/data//workspace/dynamatic/bin/dynamatic-opt+0x132d8e)
#15 0x00007ffff2e3e542 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/data//workspace/dynamatic/polygeist/llvm-project/build/./lib/libMLIRPass.so.18git+0x1c542)
#16 0x00007ffff2e41eeb mlir::PassManager::run(mlir::Operation*) (/data//workspace/dynamatic/polygeist/llvm-project/build/./lib/libMLIRPass.so.18git+0x1feeb)
#17 0x00007ffff773304a performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#18 0x00007ffff7732236 mlir::LogicalResult llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::callback_fn<mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::$_0>(long, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) MlirOptMain.cpp:0:0
#19 0x00007ffff168e432 mlir::splitAndProcessBuffer(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, bool, bool) (/data//workspace/dynamatic/polygeist/llvm-project/build/./lib/libMLIRSupport.so.18git+0x14432)
#20 0x00007ffff772d3a9 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (/data//workspace/dynamatic/polygeist/llvm-project/build/./lib/libMLIROptLib.so.18git+0xb3a9)
#21 0x00007ffff772d83a mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) (/data//workspace/dynamatic/polygeist/llvm-project/build/./lib/libMLIROptLib.so.18git+0xb83a)
#22 0x000055555567e600 main (/data//workspace/dynamatic/bin/dynamatic-opt+0x12a600)
#23 0x00007ffff0c2a1ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#24 0x00007ffff0c2a28b call_init ./csu/../csu/libc-start.c:128:20
#25 0x00007ffff0c2a28b __libc_start_main ./csu/../csu/libc-start.c:347:5
#26 0x000055555567e0d5 _start (/data//workspace/dynamatic/bin/dynamatic-opt+0x12a0d5)
/data//workspace/dynamatic/tools/dynamatic/scripts/compile.sh: line 309: 3315703 Segmentation fault "$DYNAMATIC_OPT_BIN" "$F_HANDSHAKE_TRANSFORMED" --handshake-mark-fpu-impl="impl=$FPUNITS_GEN" --handshake-set-buffering-properties="version=fpga20" --handshake-place-buffers="algorithm=$BUFFER_ALGORITHM solver=$MILP_SOLVER frequencies=$F_FREQUENCIES timing-models=$DYNAMATIC_DIR/data/components.json target-period=$TARGET_CP timeout=300 dump-logs blif-files=$DYNAMATIC_DIR/data/aig/ lut-delay=0.55 lut-size=6 acyclic-type" ${SHARING_PASS:+"$SHARING_PASS"} > "$F_HANDSHAKE_BUFFERED"
The program (compiles and runs on a x86 CPU):
// var_0,var_1,var_2_secret,var_3_secret,var_4_secret,var_5_secret,var_6_secret,var_7_secret,var_8_secret,var_9_secret
unsigned char myfunc(unsigned char var_0, unsigned char var_1, unsigned char var_2_secret, char var_3_secret, char var_4_secret, char var_5_secret, unsigned char var_6_secret, char var_7_secret, char var_8_secret, unsigned char var_9_secret) {
char arr_10_secret[256] = { (char) var_5_secret };
unsigned char var_11_secret = (unsigned char) var_7_secret;
char var_12_secret = (char) var_9_secret;
char var_13 = (char) var_1;
unsigned char var_14_secret = (unsigned char) var_7_secret;
unsigned char var_15_secret = (unsigned char) var_5_secret;
unsigned char var_16_secret = (unsigned char) var_7_secret;
unsigned char var_17 = (unsigned char) var_0;
char var_18 = (char) var_0;
unsigned char var_19 = (unsigned char) var_0;
char var_20_secret = (char) var_3_secret;
char var_21 = (char) var_1;
char var_22_secret = (char) var_7_secret;
char var_23 = (char) var_1;
unsigned char var_24_secret = (unsigned char) var_6_secret;
unsigned char var_25 = (unsigned char) var_0;
unsigned char var_26 = (unsigned char) var_0;
char var_27_secret = (char) var_9_secret;
char var_28 = (char) var_1;
char var_29_secret = (char) var_4_secret;
unsigned char var_30 = (unsigned char) var_1;
unsigned char var_31 = (unsigned char) var_0;
char var_32_secret = (char) var_6_secret;
char var_33_secret = (char) var_2_secret;
unsigned char var_34 = (unsigned char) var_1;
char var_35 = (char) var_1;
unsigned char var_36_secret = (unsigned char) var_4_secret;
char var_37 = (char) var_0;
unsigned char var_38_secret = (unsigned char) var_2_secret;
char var_39_secret = (char) var_3_secret;
unsigned char var_40_secret = (unsigned char) var_4_secret;
unsigned char var_41_secret = (unsigned char) var_7_secret;
char var_42_secret = (char) var_8_secret;
unsigned char var_43 = (unsigned char) var_1;
char var_44_secret = (char) var_2_secret;
unsigned char var_45_secret = (unsigned char) var_6_secret;
char var_46 = (char) var_1;
char var_47_secret = (char) var_2_secret;
unsigned char var_48 = (unsigned char) var_1;
char var_49 = (char) var_0;
unsigned char var_50 = (unsigned char) var_0;
unsigned char var_51 = (unsigned char) var_1;
char var_52 = (char) var_0;
unsigned char var_53 = (unsigned char) var_1;
char var_54_secret = (char) var_9_secret;
unsigned char var_55 = (unsigned char) var_0;
char var_56_secret = (char) var_6_secret;
char var_57 = (char) var_1;
char var_58 = (char) var_1;
char var_59 = (char) var_1;
char var_60_secret = (char) var_9_secret;
unsigned char var_61 = (unsigned char) var_1;
char var_62 = (char) var_0;
char var_63_secret = (char) var_6_secret;
arr_10_secret[((int) var_0)] = var_7_secret | var_8_secret;
arr_10_secret[((int) var_1)] = var_4_secret >> var_8_secret;
arr_10_secret[((int) var_0)] = var_5_secret << var_7_secret;
arr_10_secret[((int) var_0)] = arr_10_secret[((int) var_0)] & var_5_secret;
arr_10_secret[((int) var_0)] = var_4_secret - var_7_secret;
var_36_secret = var_0 - var_6_secret;
arr_10_secret[((int) var_0)] = var_3_secret >> arr_10_secret[((int) var_0)];
arr_10_secret[((int) var_0)] = var_5_secret - arr_10_secret[((int) var_1)];
if (var_1 ^ var_0)
{
arr_10_secret[((int) var_1)] = var_3_secret >> var_7_secret;
arr_10_secret[((int) var_0)] = var_7_secret ^ var_8_secret;
}
else
{
var_17 = 0;
while (var_17 < 11)
{
arr_10_secret[((int) var_17)] = var_8_secret ^ arr_10_secret[((int) var_0)];
arr_10_secret[((int) var_48)] = arr_10_secret[((int) var_17)] ^ var_5_secret;
arr_10_secret[((int) var_17)] = arr_10_secret[((int) var_0)] * var_8_secret;
var_39_secret = arr_10_secret[((int) var_48)] - var_8_secret;
var_27_secret = arr_10_secret[((int) var_0)] | var_3_secret;
if (var_17 < var_0)
break;
var_17++;
}
arr_10_secret[((int) var_17)] = arr_10_secret[((int) var_17)] << var_7_secret;
}
arr_10_secret[((int) var_17)] = arr_10_secret[((int) var_0)] & var_8_secret;
arr_10_secret[((int) var_1)] = arr_10_secret[((int) var_17)] & var_5_secret;
arr_10_secret[((int) var_17)] = arr_10_secret[((int) var_17)] & var_7_secret;
arr_10_secret[((int) var_1)] = arr_10_secret[((int) var_1)] >> var_8_secret;
arr_10_secret[((int) var_17)] = arr_10_secret[((int) var_17)] + var_5_secret;
return (unsigned char) (var_0) + (unsigned char) (var_1) + (unsigned char) (var_2_secret) + (unsigned char) (var_3_secret) + (unsigned char) (var_4_secret) + (unsigned char) (var_5_secret) + (unsigned char) (var_6_secret) + (unsigned char) (var_7_secret) + (unsigned char) (var_8_secret) + (unsigned char) (var_9_secret) + (unsigned char) (arr_10_secret[((int) var_17)]) + (unsigned char) (arr_10_secret[((int) var_1)]) + (unsigned char) (arr_10_secret[((int) var_1)]) + (unsigned char) (arr_10_secret[((int) var_0)]) + (unsigned char) (arr_10_secret[((int) var_17)]) + (unsigned char) (arr_10_secret[((int) var_17)]) + (unsigned char) (arr_10_secret[((int) var_17)]) + (unsigned char) (arr_10_secret[((int) var_0)]) + (unsigned char) (arr_10_secret[((int) var_0)]) + (unsigned char) (arr_10_secret[((int) var_25)]) + (unsigned char) (arr_10_secret[((int) var_0)]) + (unsigned char) (arr_10_secret[((int) var_0)]) + (unsigned char) (arr_10_secret[((int) var_0)]) + (unsigned char) (arr_10_secret[((int) var_0)]) + (unsigned char) (arr_10_secret[((int) var_17)]) + (unsigned char) (arr_10_secret[((int) var_1)]) + (unsigned char) (arr_10_secret[((int) var_1)]) + (unsigned char) (arr_10_secret[((int) var_25)]) + (unsigned char) (arr_10_secret[((int) var_48)]) + (unsigned char) (arr_10_secret[((int) var_17)]) + (unsigned char) (arr_10_secret[((int) var_0)]) + (unsigned char) (arr_10_secret[((int) var_17)]) + (unsigned char) (arr_10_secret[((int) var_1)]) + (unsigned char) (arr_10_secret[((int) var_1)]) + (unsigned char) (arr_10_secret[((int) var_17)]) + (unsigned char) (arr_10_secret[((int) var_0)]) + (unsigned char) (arr_10_secret[((int) var_1)]) + (unsigned char) (arr_10_secret[((int) var_17)]) + (unsigned char) (arr_10_secret[((int) var_1)]) + (unsigned char) (arr_10_secret[((int) var_0)]) + (unsigned char) (arr_10_secret[((int) var_0)]) + (unsigned char) (arr_10_secret[((int) var_0)]) + (unsigned char) (arr_10_secret[((int) var_1)]) + (unsigned char) (arr_10_secret[((int) var_0)]) + (unsigned char) (arr_10_secret[((int) var_25)]) + (unsigned char) (var_11_secret) + (unsigned char) (var_14_secret) + (unsigned char) (var_17) + (unsigned char) (var_25) + (unsigned char) (var_27_secret) + (unsigned char) (var_36_secret) + (unsigned char) (var_39_secret) + (unsigned char) (var_41_secret);
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand(time(NULL));
for (int i = 0; i < 10; i++) {
unsigned char var_0 = rand() % 256;
unsigned char var_1 = rand() % 256;
unsigned char var_2_secret = rand() % 256;
char var_3_secret = rand() % 256;
char var_4_secret = rand() % 256;
char var_5_secret = rand() % 256;
unsigned char var_6_secret = rand() % 256;
char var_7_secret = rand() % 256;
char var_8_secret = rand() % 256;
unsigned char var_9_secret = rand() % 256;
unsigned char result = myfunc(var_0, var_1, var_2_secret, var_3_secret,
var_4_secret, var_5_secret, var_6_secret,
var_7_secret, var_8_secret, var_9_secret);
printf("Result %d: %u\n", i + 1, result);
}
return 0;
}
Metadata
Metadata
Assignees
Labels
No labels