Skip to content

[FPGA20] "Solving the buffer placement MILP would yield an incorrect placement." error #995

Description

@zero9178

Given the following C code:

#include "dynamatic/Integration.h"
#include <stdint.h>
#ifdef HLS_FUZZER_VERIFY
constexpr
#endif
    int16_t
    test3(int8_t, uint16_t, float, uint32_t, uint32_t, uint16_t var11, uint16_t,
          uint16_t, uint16_t, int8_t, uint16_t, uint8_t, uint16_t,
          uint16_t var20, int8_t, uint8_t, uint8_t var3[8], int8_t[8],
          double[1], int32_t[8]) {
  for (uint32_t var0 = 0; var0 < (0 >= 0); var0 += 1) {
    for (uint32_t var1 = var20 ? var11 : 707019668; var1 < (0 >= 0);)
      for (uint32_t var2 = var0; var2;)
        var3[0] = 0;
    var0 = 0;
  }
  return 0;
}
#ifdef HLS_FUZZER_VERIFY
constexpr
#endif
    void
    test_bench() {
  int8_t var4 = 0;
  uint16_t var6 = 0;
  uint32_t var9 = 0;
  uint32_t var10 = 0;
  uint16_t var11 = 0;
  uint16_t var13 = 0;
  uint16_t var14 = 0;
  uint16_t var15 = 0;
  int8_t var16 = 0;
  uint16_t var17 = 0;
  uint8_t var18 = 0;
  uint16_t var19 = 0;
  uint16_t var20 = 0;
  int8_t var21 = 0;
  uint8_t var22 = 0;
  uint8_t var3[8];
  int8_t var5[8];
  double var8[1];
  int32_t var23[8];
  CALL_KERNEL(test3, var4, var6, 0, var9, var10, var11, var13, var14, var15,
              var16, var17, var18, var19, var20, var21, var22, var3, var5, var8,
              var23);
}
int main() { test_bench(); }

Compiling it with Dynamatic using FPGA20 buffer placement yields the following unwarranted error:

dynamatic> set-src test3.c
dynamatic> compile --buffer-algorithm fpga20 --instrument-ii
[INFO] Copied C source
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:7:17: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    7 |     test3(int8_t, uint16_t, float, uint32_t, uint32_t, uint16_t var11, uint16_t,
      |                 ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:7:27: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    7 |     test3(int8_t, uint16_t, float, uint32_t, uint32_t, uint16_t var11, uint16_t,
      |                           ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:7:34: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    7 |     test3(int8_t, uint16_t, float, uint32_t, uint32_t, uint16_t var11, uint16_t,
      |                                  ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:7:44: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    7 |     test3(int8_t, uint16_t, float, uint32_t, uint32_t, uint16_t var11, uint16_t,
      |                                            ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:7:54: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    7 |     test3(int8_t, uint16_t, float, uint32_t, uint32_t, uint16_t var11, uint16_t,
      |                                                      ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:7:80: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    7 |     test3(int8_t, uint16_t, float, uint32_t, uint32_t, uint16_t var11, uint16_t,
      |                                                                                ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:8:19: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    8 |           uint16_t, uint16_t, int8_t, uint16_t, uint8_t, uint16_t,
      |                   ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:8:29: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    8 |           uint16_t, uint16_t, int8_t, uint16_t, uint8_t, uint16_t,
      |                             ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:8:37: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    8 |           uint16_t, uint16_t, int8_t, uint16_t, uint8_t, uint16_t,
      |                                     ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:8:47: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    8 |           uint16_t, uint16_t, int8_t, uint16_t, uint8_t, uint16_t,
      |                                               ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:8:56: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    8 |           uint16_t, uint16_t, int8_t, uint16_t, uint8_t, uint16_t,
      |                                                        ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:8:66: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    8 |           uint16_t, uint16_t, int8_t, uint16_t, uint8_t, uint16_t,
      |                                                                  ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:9:33: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    9 |           uint16_t var20, int8_t, uint8_t, uint8_t var3[8], int8_t[8],
      |                                 ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:9:42: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    9 |           uint16_t var20, int8_t, uint8_t, uint8_t var3[8], int8_t[8],
      |                                          ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:9:67: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    9 |           uint16_t var20, int8_t, uint8_t, uint8_t var3[8], int8_t[8],
      |                                                                   ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:10:17: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
   10 |           double[1], int32_t[8]) {
      |                 ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:10:29: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
   10 |           double[1], int32_t[8]) {
      |                             ^
17 warnings generated.
[INFO] Disabled short-circuiting
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:7:17: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    7 |     test3(int8_t, uint16_t, float, uint32_t, uint32_t, uint16_t var11, uint16_t,
      |                 ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:7:27: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    7 |     test3(int8_t, uint16_t, float, uint32_t, uint32_t, uint16_t var11, uint16_t,
      |                           ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:7:34: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    7 |     test3(int8_t, uint16_t, float, uint32_t, uint32_t, uint16_t var11, uint16_t,
      |                                  ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:7:44: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    7 |     test3(int8_t, uint16_t, float, uint32_t, uint32_t, uint16_t var11, uint16_t,
      |                                            ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:7:54: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    7 |     test3(int8_t, uint16_t, float, uint32_t, uint32_t, uint16_t var11, uint16_t,
      |                                                      ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:7:80: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    7 |     test3(int8_t, uint16_t, float, uint32_t, uint32_t, uint16_t var11, uint16_t,
      |                                                                                ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:8:19: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    8 |           uint16_t, uint16_t, int8_t, uint16_t, uint8_t, uint16_t,
      |                   ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:8:29: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    8 |           uint16_t, uint16_t, int8_t, uint16_t, uint8_t, uint16_t,
      |                             ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:8:37: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    8 |           uint16_t, uint16_t, int8_t, uint16_t, uint8_t, uint16_t,
      |                                     ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:8:47: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    8 |           uint16_t, uint16_t, int8_t, uint16_t, uint8_t, uint16_t,
      |                                               ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:8:56: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    8 |           uint16_t, uint16_t, int8_t, uint16_t, uint8_t, uint16_t,
      |                                                        ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:8:66: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    8 |           uint16_t, uint16_t, int8_t, uint16_t, uint8_t, uint16_t,
      |                                                                  ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:9:33: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    9 |           uint16_t var20, int8_t, uint8_t, uint8_t var3[8], int8_t[8],
      |                                 ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:9:42: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    9 |           uint16_t var20, int8_t, uint8_t, uint8_t var3[8], int8_t[8],
      |                                          ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:9:67: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
    9 |           uint16_t var20, int8_t, uint8_t, uint8_t var3[8], int8_t[8],
      |                                                                   ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:10:17: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
   10 |           double[1], int32_t[8]) {
      |                 ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/test3.c:10:29: warning: omitting the parameter name in a function definition is a C23 extension [-Wc23-extensions]
   10 |           double[1], int32_t[8]) {
      |                             ^
17 warnings generated.
[INFO] Compiled to LLVM IR
[INFO] Optimized LLVM IR
[INFO] Applied memory dependency analysis to LLVM IR
[INFO] Converted to std dialect
[INFO] Applied CF transformations
[INFO] Marked memory accesses with the corresponding interfaces in cf
[INFO] Compiled cf to handshake
[INFO] Applied transformations to handshake
[INFO] Built kernel for profiling
[INFO] Ran kernel for profiling
[INFO] Profiled cf-level
[INFO] Set to use "gurobi" to solve buffer placement MILP!
[INFO] Running smart buffer placement with CP = 4.000 and algorithm = 'fpga20'
/home/mboeck/dynamatic/build/bin/bug102/out/comp/handshake_transformed.mlir:38:11: error: Result 0 defined in block 1 is used in block 2. This connection does not exist according to the CFG graph. Solving the buffer placement MILP would yield an incorrect placement.
    %13 = constant %12 {handshake.bb = 1 : ui32, handshake.name = "constant3", value = 0 : i16} : <>, <i16>
          ^
/home/mboeck/dynamatic/build/bin/bug102/out/comp/handshake_transformed.mlir:38:11: note: see current operation: %15 = "handshake.constant"(%14) {handshake.bb = 1 : ui32, handshake.name = "constant3", value = 0 : i16} : (!handshake.control<>) -> !handshake.channel<i16>
[FATAL] Failed to place smart buffers

Metadata

Metadata

Assignees

No one assigned

    Labels

    compiler-crashThe given code causes the compiler to crashfuzzer-foundBugs found using an automated fuzzer

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions